こんにちは。自動化の世界へようこそ。
「マクロの記録」ボタンを押すだけの生活から一歩踏み出し、OSの深淵を覗こうとしているあなたを、私は心から歓迎します。VBScriptは、今や「レガシー」と揶揄されることもありますが、WindowsというOSの心臓部に最も近い場所で、軽量かつ強力に立ち回れる唯一無二のツールです。
今日は、多くの初心者が「SendKeys(キーボード入力をシミュレートする不安定な手法)」で挫折する「ウィンドウ制御」という壁を、WScript.Shellの真の力を使ってエレガントに乗り越える方法を伝授します。
—
1. なぜ「SendKeys」を使ってはいけないのか?
まず、初心者が必ず通る道である `SendKeys` について。これは「キーボードを叩く真似」をするだけの不安定な手法です。もし実行中にユーザーがマウスに触れたら? 処理の途中で別のウィンドウが割り込んだら? 途端に挙動が崩壊します。
プロのエンジニアは、「状態を特定し、OSに直接命じる」というアプローチを取ります。今回は、WScript.Shellが持つ `AppActivate` メソッドを軸に、堅牢なウィンドウ制御の基本を学びましょう。
—
2. 実践:ウィンドウを操るための「魔法のコード」
以下のコードは、特定のアプリケーション(例:メモ帳)を起動し、それをアクティブにして、最小化や最大化を制御する構成です。
‘ ウィンドウ制御サンプル: メモ帳を起動して操作する
Option Explicit
Dim objShell
Set objShell = WScript.CreateObject(“WScript.Shell”)
‘ 1. アプリケーションの起動(パスは環境に合わせて調整してください)
objShell.Run “notepad.exe”, 1, False
‘ 2. 起動を待機する(ここが重要!)
‘ プロセスが立ち上がる前に命令を送るとエラーになります
WScript.Sleep 1000
‘ 3. ウィンドウをアクティブにする
‘ タイトルバーに表示されている名前を正確に指定します
If objShell.AppActivate(“メモ帳”) Then
WScript.Sleep 500
‘ 4. ウィンドウ操作(SendKeysは「操作の最後」に使うのが鉄則です)
‘ % は Altキー, n は 最小化(Minimize) などを意味します
‘ ただし、より確実なのはメニュー操作を呼び出すことです
‘ 例:最大化を実現するためのショートカットキー送出
‘ Windowsの標準的な最大化コマンド (Alt + Space -> x)
objShell.SendKeys “% x”
WScript.Sleep 500
MsgBox “ウィンドウを最大化しました!”, 64, “自動化成功”
Else
MsgBox “対象のウィンドウが見つかりませんでした。”, 48, “エラー”
End If
Set objShell = Nothing
—
3. ここをクリアすれば一人前! 重要な3つのポイント
VBScriptで躓くポイントは、実はコードの書き方ではなく「OSとの呼吸」にあります。
① 「待機(Sleep)」という名の配慮
プログラムは人間より遥かに高速です。OSがウィンドウを描画する前に命令を送っても無視されます。`WScript.Sleep` は怠慢ではなく、「OSの準備完了を待つ」というプロの作法です。
② ウィンドウタイトルの一致
`AppActivate` は、ウィンドウのタイトルバーに表示されている文字列を検索します。「無題 – メモ帳」であれば、その通りに指定しなければなりません。部分一致が効く場合もありますが、基本は正確な記述を心がけてください。
③ ユーザー操作との競合を避ける
VBScriptを実行している間は、マウスやキーボードから手を離してください。OSのウィンドウ制御は「フォーカス(入力対象)」が命です。別のウィンドウをクリックした瞬間に、プログラムが明後日の方向へ入力を始めてしまうのは、この世界の常識です。
—
4. さらなる高みへ:User32.dll への誘い
今回はWScript.Shellという標準的な道具を使いましたが、もしあなたが「ウィンドウの座標(X, Y)をミリ単位で指定したい」「ウィンドウの透明度を変えたい」という欲求を持ったなら、次は DynamicWrapperX や PowerShellとの連携 を検討すべきです。
しかし、まずはこのスクリプトを自分の手で書き、メモ帳やブラウザを自在に最小化・最大化できる喜びを噛み締めてください。この「制御できた!」という感覚こそが、自動化エンジニアとしての最大の武器になります。
—
先輩からのアドバイス:
コードが動かないときは、`WScript.Echo` を使って変数の値をこまめに表示させましょう。デバッグは「どこまで思い通りに動いたか」を一つずつ突き止める宝探しのようなものです。
さあ、あなたのPCを、あなたの命令通りに動く「執事」へと進化させてみませんか? 次の挑戦を待っていますよ。
