【入門編】【レガシー操作】SendKeys メソッドを活用したGUIアプリの簡易自動操作とキー送信タイミングの極意 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

伝説のレガシー操作術:VBScriptとSendKeysでGUIアプリを「意のままに操る」極意

こんにちは。現場で長年、数々の「レガシーの壁」を突破してきたエンジニアです。

皆さんの周りにも、APIもなければコマンドラインインターフェース(CLI)も存在しない、かつての古き良きデスクトップアプリがあるのではないでしょうか。「この入力作業、自動化できればどれほど楽か…」とため息をついているあなたへ。

今日は、VBScript(WSH)という「古の武器」を使い、GUIアプリをまるで操り人形のように操作する『SendKeysの極意』を伝授します。マクロの記録を卒業し、プロの自動化エンジニアへの第一歩を踏み出しましょう。

—

1. なぜ「SendKeys」は気難しいのか?

`SendKeys` メソッドは、Windows Script Host(WSH)の `WScript.Shell` オブジェクトが提供する、仮想キーボード入力機能です。しかし、初心者がこれを使うと十中八九失敗します。

最大の原因は「タイミングの不一致」です。

プログラムは光速に近い速度で命令を実行しますが、GUIアプリの画面描画やウィンドウのフォーカス移動は、人間が待てるレベルの「緩慢な速度」で動いています。プログラムがキーを送信したとき、まだアプリが準備できていなければ、その信号は虚空に消えるか、誤ったフィールドに書き込まれます。

—

2. 実践:安定稼働する自動化テンプレート

まずは、基本となるコードを見てください。ここには「安定して動かすための定石」が詰まっています。

‘ WScript.Shellオブジェクトの生成
Set ws = WScript.CreateObject(“WScript.Shell”)

‘ 1. アプリを起動(または起動済みの場合はアクティブ化)
ws.Run “notepad.exe”

‘ 2. 起動の完了を待つ「余白」を作る(重要!)
WScript.Sleep 1000

‘ 3. アプリがフォーカスを取得したか確認(AppActivate)
‘ 引数にはウィンドウタイトルの文字列を指定します
If ws.AppActivate(“メモ帳”) Then
WScript.Sleep 500 ‘ フォーカスが完全に移るのを待つ

‘ 4. キー送信開始
ws.SendKeys “Hello, Legacy World!”
WScript.Sleep 200

ws.SendKeys “{ENTER}”
ws.SendKeys “Automation is powerful.”
Else
WScript.Echo “アプリが見つかりません。起動を確認してください。”
End If

‘ オブジェクトの解放(メモリの礼儀)
Set ws = Nothing

—

3. ここをクリアすれば完璧!「3つの鉄則」

コードをただコピーするだけでなく、以下のポイントを理解することが「自動化の職人」への道です。

① `WScript.Sleep` は手抜きではない

「待ち時間を入れるのは遅いから嫌だ」と言う人がいますが、これは間違いです。「確実な待ち」は「最強の安定」を生みます。 アプリの反応速度に合わせて、500ms〜1000ms程度のウェイトを入れる勇気を持ってください。

② `AppActivate` で確実に「狙う」

SendKeysは、その瞬間にアクティブなウィンドウに対してキーを送ります。別のウィンドウが前に出てきたら、入力先がズレて悲劇が起きます。操作前には必ず `AppActivate` を行い、対象が最前面にあることを担保しましょう。

③ 特殊キーの書き方を覚える

SendKeysには、EnterやTabといったキーを表現する「おまじない」があります。

  • `{ENTER}`:エンターキー
  • `{TAB}`:タブキー
  • `{ESC}`:エスケープキー
  • `{BACKSPACE}`:バックスペース
  • `+`(シフト)、`^`(コントロール)、`%`(オルト):これらはキーと組み合わせて使います。
  • 例:`ws.SendKeys “%{F4}”` (Alt + F4 で終了)

—

4. 陥りやすいエラーと対処法

  • 「キーが入力されない」:

原因のほとんどは「フォーカスが当たっていない」か「入力モード(全角半角)が違う」ことです。`SendKeys` を送る前に、一度手動で入力モードを「半角」に切り替えてから実行する癖をつけましょう。

  • 「全角文字が送れない」:

SendKeysは基本的に英数字向けです。日本語を入力したい場合は、一旦クリップボードを経由して `Ctrl + V` で貼り付ける手法が定石です(これはまた別の機会に深く解説しますね)。

—

最後に:自動化は「敬意」から始まる

VBScriptでGUIを操作するのは、言わば「相手のアプリに無理やり介入する」行為です。相手の動きを観察し、十分に余裕を持って接してあげる。そうすれば、レガシーなシステムも、あなたの忠実な下僕となってくれるはずです。

今回のコードをベースに、まずは自分の業務の「定型クリック・入力」を一つだけ自動化してみてください。その小さな成功体験が、あなたのエンジニアとしての視座を大きく引き上げてくれるはずです。

さあ、古いシステムに新しい息吹を吹き込みに行きましょう!何か詰まったら、いつでもここに戻ってきてくださいね。

タイトルとURLをコピーしました