windows7の環境下で 以下のvbsプログラムをタスクスケジューラで起動したのですが 最前面に表示されず文字が送れません
どうすればいいのでしょうか?
Option Explicit
Const vbMaximizedFocus = 3 '最大化、かつ最前面のウィンドウ
Dim objWShell
Set objWShell = CreateObject("WScript.Shell")
objWShell.Run "%windir%\system32\calc.exe", vbMaximizedFocus, False
Set objWShell = Nothing
On Error Resume Next
Dim objWshShell ' WshShell オブジェクト
Dim strCmdLine ' 実行するコマンド
Dim objExecCmd ' 実行コマンド情報
Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objExecCmd = objWshShell.Exec(strCmdLine)
WScript.Sleep(1000)
objWshShell.SendKeys "3"
Set objExecCmd = Nothing
Set objWshShell = Nothing
スクリプトを以下のように変更してみて下さい。
Option Explicit Const vbMaximizedFocus = 3 '最大化、かつ最前面のウィンドウ Dim objWShell Set objWShell = CreateObject("WScript.Shell") objWShell.Run("%windir%\system32\calc.exe", 1, True) Set objWShell = Nothing On Error Resume Next Dim objWshShell ' WshShell オブジェクト Dim strCmdLine ' 実行するコマンド Dim objExecCmd ' 実行コマンド情報 Set objWshShell = WScript.CreateObject("WScript.Shell") Set objExecCmd = objWshShell.Exec(strCmdLine) WScript.Sleep(1000) objWshShell.SendKeys "3" Set objExecCmd = Nothing Set objWshShell = Nothing
行 5 文字 53 エラー:subプロシージャを呼び出すときに、かっこをつかうことはできません。と出てvbs自体が動きませんでした
SendKeys をする前に、AppActivate をして、ほんの少し Sleep をすると、期待通りの動作をするんじゃないかと思います。
元のソースコードを尊重すると、以下のような感じになると思います。
Option Explicit Const vbMaximizedFocus = 3 '最大化、かつ最前面のウィンドウ Dim objWShell Set objWShell = CreateObject("WScript.Shell") objWShell.Run "%windir%\system32\calc.exe", vbMaximizedFocus, False Set objWShell = Nothing On Error Resume Next Dim objWshShell ' WshShell オブジェクト Dim strCmdLine ' 実行するコマンド Dim objExecCmd ' 実行コマンド情報 Set objWshShell = WScript.CreateObject("WScript.Shell") Set objExecCmd = objWshShell.Exec(strCmdLine) WScript.Sleep(1000) objWshShell.AppActivate "電卓" ' ★この2行を追加しました WScript.Sleep(500) ' ★この2行を追加しました objWshShell.SendKeys "3" Set objExecCmd = Nothing Set objWshShell = Nothing
その上で、ソース中ほどの、WScript.Shell をもうひとつ作って、空っぽの Exec をするのは意味がないと思うので、不要な記述をバッサリと削ったのが以下のコードになります。
Option Explicit On Error Resume Next Const vbMaximizedFocus = 3 '最大化、かつ最前面のウィンドウ Dim objWShell Set objWShell = CreateObject("WScript.Shell") objWShell.Run "%windir%\system32\calc.exe", vbMaximizedFocus, False WScript.Sleep(1000) objWShell.AppActivate "電卓" ' ★電卓にフォーカスを当てて WScript.Sleep(500) ' ★ほんの少しだけ待つ objWShell.SendKeys "3" Set objWShell = Nothing
AppActivate に渡すパラメータは、calc.exe のタイトルの文字です。
まず、無いとは思いますが、英語モードで Windows を使っているような場合には、変更してください。
AppActivate の後の Sleep する時間は適宜調整してください。
AppActivate をした後から、SendKeys するまでの間に、他のツールにフォーカスを奪われる可能性もあるので、あまり長くない方が良いと思います。
AppActivate の後の Sleep を長めにとっても駄目でしょうか?
objWShell.AppActivate "電卓" ' ★電卓にフォーカスを当てて WScript.Sleep(2000) ' ★ほんの少しだけ待つ
因みに、電卓のウィンドウのタイトルは「電卓」になってますよね?
windows サポートフォーラムにて質問しましたところ、
http://answers.microsoft.com/ja-jp/windows/forum/windows_7-windows_programs/%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%B9%E3%82%B1/2014c025-fb5f-42d5-a47f-339abcbd5af9
Set wShell=CreateObject("WScript.Shell")
wShell.run "cmd /c start calc.exe"
Do While Not wShell.AppActivate("電卓")
WScript.Sleep 100
Loop
wShell.SendKeys "3"
この用にすれば解決出来ました
入れてみましたがダメでした
2013/07/14 13:21:00