人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

タスクスケジューラでvbsを実行した時、起動したソフトが最前面に表示されません
windows7の環境下で 以下のvbsプログラムをタスクスケジューラで起動したのですが 最前面に表示されず文字が送れません
どうすればいいのでしょうか?

●質問者: takanii
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

質問者から

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


1 ● Cherenkov
●150ポイント

SendKeysの前に
objWshShell.AppActivate "電卓"
を入れてみてください。

参考
WshShellオブジェクトを利用する(1) ? @IT


takaniiさんのコメント
入れてみましたがダメでした

2 ● だわかき
●0ポイント

スクリプトを以下のように変更してみて下さい。

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

takaniiさんのコメント
行 5 文字 53 エラー:subプロシージャを呼び出すときに、かっこをつかうことはできません。と出てvbs自体が動きませんでした

3 ● a-kuma3
●150ポイント

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 するまでの間に、他のツールにフォーカスを奪われる可能性もあるので、あまり長くない方が良いと思います。


takaniiさんのコメント
うーん、下の方のvbsを登録して起動しましたが 電卓は起動できるのですが3というキーを送れません

a-kuma3さんのコメント
AppActivate の後の Sleep を長めにとっても駄目でしょうか? >|| objWShell.AppActivate "電卓" ' ★電卓にフォーカスを当てて WScript.Sleep(2000) ' ★ほんの少しだけ待つ ||< 因みに、電卓のウィンドウのタイトルは「電卓」になってますよね?

takaniiさんのコメント
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" この用にすれば解決出来ました

質問者から

objWShell.Run "%windir%\system32\calc.exe" の所を
wShell.run "ccmd /c start c:\windir\system32\calc.exe"
というようにしましたら解決しました!
みなさん、ありがとうございますた!


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ