dポイントプレゼントキャンペーン実施中!

VBSを利用して、IEのタブを自動的に切り替え続けるスクリプトを作成しています。

以下現状

手動でやる事
・作成したVBSファイルをダブルクリックして起動
・IEは常に画面の全面(アクティブウィンドウ)にしておく

VBSファイルの中身
set W = WScript.CreateObject("WScript.Shell")

do
WScript.sleep 30000
W.Sendkeys "^{TAB}"

loop

これでも正常に動くのですが、
ここにESCキーを押す事でプロセスを終了させるスクリプトを追記したいのですが、どのようにしたらよいでしょうか。

ご教授お願いします。

A 回答 (2件)

こんばんは。



winAPIにGetAsyncKeyState関数があります。これを利用されてはどうでしょう。
ただ、VBSからwinAPIは直接呼び出す事が出来ません。
そこでExcelがインストールされているなら、Excel経由でwinAPIを呼び出し
Key入力の判定を行います。

Dim Esc
Dim ExcelApp
Dim cmd
Dim W
Dim Ret

Set W = WScript.CreateObject("WScript.Shell")
Set ExcelApp = WScript.CreateObject("Excel.Application")

Esc = 27 'Escのキーコード

Set ExcelApp = WScript.CreateObject("Excel.Application")
cmd = "CALL(""user32.dll"", ""GetAsyncKeyState"", ""JJ"", " & Esc & ")"

Ret=0

'Escケープが押されているとRetには0以外が返る
'IEの処理は入れていません。
Do While Ret = 0
WScript.sleep 100
Ret = ExcelApp.ExecuteExcel4Macro(cmd)

Loop

Wscript.Echo "End"
ExcelApp.Quit
Set ExcelApp = Nothing


これを実行して見てください。まずExcelが非表示で開きます。Escを押すと
endとメッセージが出るはずです。その後Excelを閉じExcelへの参照を解放します。
タスクマネージャーを開きながら実行すると確認しやすいです。

質問者さんのLoopは30秒間隔ですから、Escの検知は押しっぱなしでないと厳しいかもです。

うまく調整して組み込んでみて下さい。

それでは。
    • good
    • 1
この回答へのお礼

ありがとうございます!

非常によくわかりました。色々調べているうちにGetAsyncKeyStateを利用できるというのは
わかったんですが、Excel経由で呼び出さないといけなかったんですね。

勉強になりましたm(__)m

お礼日時:2014/03/03 08:34

No1です



今見直していたら余計な行がありました。

Set ExcelApp = WScript.CreateObject("Excel.Application")

これを2回書いてしまっているのでどちらか消して下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!