タスクスケジューラでvbsを実行した時、起動したソフトが最前面に表示されません

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/07/18 00:59:13
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:takanii

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

回答3件)

id:Cherenkov No.1

回答回数1504ベストアンサー獲得回数493

ポイント150pt

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

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

id:takanii

入れてみましたがダメでした

2013/07/14 13:21:00
id:dawakaki No.2

回答回数797ベストアンサー獲得回数122

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

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
id:takanii

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

2013/07/14 13:20:29
id:a-kuma3 No.3

回答回数4973ベストアンサー獲得回数2154

ポイント150pt

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

他1件のコメントを見る
id:a-kuma3

AppActivate の後の Sleep を長めにとっても駄目でしょうか?

objWShell.AppActivate "電卓"            ' ★電卓にフォーカスを当てて
WScript.Sleep(2000)                     ' ★ほんの少しだけ待つ

因みに、電卓のウィンドウのタイトルは「電卓」になってますよね?

2013/07/17 21:03:58
id: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"

この用にすれば解決出来ました

2013/07/19 02:26:10
id:takanii

objWShell.Run "%windir%\system32\calc.exe" の所を

wShell.run "ccmd /c start c:\windir\system32\calc.exe"

というようにしましたら解決しました!

みなさん、ありがとうございますた!

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません