小技プログラミング

IEクリップボードを利用してSendKeysで出力

IEのクリップボードに値を格納して、WSHのSendKeysで貼り付けを実行するVBScriptです。
下のサンプルプログラムでは、Windowsのメモ帳を起動して、プロセスの確認をしてから貼り付けを実行しています。

アプリケーションやIEなどにパパッと値を入力して自動化させたいな~という時に便利です。
今回はメモ帳ですが、起動するアプリを変えると色んな事がワンクリックで実行可能に!
ルーチン作業はプログラムに任せて、お茶を飲みながらのほほ~んとしましょう。

※サンプルソースコードを丸ごとコピーして、メモ帳に張り付けてから適当な名前を付けて保存すると実際に動きを見る事が出来ます。
実行は保存したファイルをダブルクリックするとできます。
ファイルの拡張子は .vbs にして保存しないと動きません。(例:sampleFile.vbs)

Option Explicit
Dim objIE, WshShell, objExec, strProcess

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
objIE.document.parentWindow.clipboardData.setData "text", "クリップボードに入れる値"

Set WshShell = CreateObject("WScript.Shell")
Set objExec = WshShell.Exec("notepad.exe")
strProcess = objExec.ProcessId

If CheckProcess(strProcess, 500) Then
WshShell.SendKeys("^V")
Else
MsgBox "ERROR:メモ帳が見つかりませんでした。" & _
vbCrLf  "プログラムを終了します。"
WScript.Quit
End If

' 起動したメモ帳のプロセスがアクティブか300ミリ秒*10回検証します
' 10回以内にアクティブになればTrueを返却します。
' 10回検証してメモ帳のプロセスがアクティブにならない時はFalseを返却
Function CheckProcess(strProcessId, intWaitTime)
Dim intCount

For intCount = 1 To 10
If WshShell.AppActivate(strProcessId) Then
WScript.Sleep(intWaitTime)
CheckProcess = True
Exit Function
Else
WScript.Sleep(300)
End If
Next
CheckProcess = False
End Function

※IE7以降のブラウザでは、クリップボードへのアクセス時に警告が表示されます。
クリップボードへのアクセスを許可する事で、最後までプログラムを実行できます。

【回避策】
クリップボードへのアクセス確認ダイアログを表示させないようにする場合は、IEのセキュリティ設定を変更する必要があります。
1.IEの上部にあるメニューの[ツール]から [インターネット オプション] をクリックします。
2.[セキュリティ] タブで、[インターネット] の[レベルのカスタマイズ] をクリックします。
3.IEの各種設定画面が表示されるので、真ん中辺りにある[スクリプト] 項目のところで [スクリプトによる貼り付け処理の許可] の [有効] を選択することで次回から確認ダイアログは表示されなくなります。