WSHを使って現在起動中の「タスク名」を調べる具体的な記述方法を教えてください。

(特定のタスク(アプリケーション)が起動中かどうかを監視して、もし起動していなければ起動させたいのです)
※ただし、プロセス名では同じものが複数あり区別できないためタスクバーに表示される名称(タスク名)で調べる方法を教えて下さい。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/07/14 13:54:54
  • 終了:--

回答(2件)

id:akibare No.1

akibare回答回数157ベストアンサー獲得回数52005/07/14 15:06:19

ポイント30pt

タスクの管理にはWindows Management Interface(WMI)を使います。リンク先にまさに、特定のプロセスが起動中か見て再起動するというプログラムのサンプルがあります。

こちら入門編

プロセスのクラスWin32_Process


コードサンプルもありました:


strComputer = ”.”

Set objWMIService = GetObject(”winmgmts:” _

& ”{impersonationLevel=impersonate}!¥¥” _

& strComputer & ”¥root¥cimv2”)


Set colProcesses = objWMIService.ExecQuery( _

”select * from win32_process” )

For Each objProcess in colProcesses

If objProcess.GetOwner ( User, Domain ) = 0 Then

Wscript.Echo ”Process ” & _

objProcess.Caption & _

” belongs to ” & Domain & _

”¥” & User

Else

Wscript.Echo ”Problem ” & Rtn & _

” getting the owner for process ” _

& objProcess.Caption

End If

Next


う、でもいくら探しても『タスク名』のプロパティはありません!たとえばiexplore.exeは1つのプロセスですが、ウィンドウを沢山開いていれば複数の「タスク」になり、どのみちプロセスとタスクは1対1ではないです。WMIのほかのクラスを探しても「タスク」はなさそう。

id:moochin2004

ご回答ありがとうございます。

set WshShell = CreateObject(”WScript.Shell”)

WshShell.AppActivate ”はてな質問一覧”

みたいにすれば、タスクバーに表示されてる名前でアプリケーションを指定できますよね?

「iexplore.exe」が起動中かどうかではなく、「はてな質問一覧」が起動中か「Yahoo! JAPAN」が起動中か、までを特定したいんです。

※上記のやり方でアクティブにしてみて出来なければ起動していない、と判断するという手も考えられますが、正面から突破できないかなと思いまして。

2005/07/14 16:08:33
id:andi No.2

andi回答回数448ベストアンサー獲得回数02005/07/14 16:07:31

ポイント30pt

http://www.microsoft.com/japan/msdn/library/default.asp?url=/jap...

MSDN ライブラリ サイト移行に関する重要なお知らせ

タスクバーのタイトルを取得するにはWin32 APIのFindWindowを使用する必要がありますが、調べた限りではWSHから直接呼び出すことはできないようです。


と言うわけで、間に挟むためのActiveXコンポーネントを作成したりしないといけないようです。

id:moochin2004

ご回答ありがとうございます。

「タスク名」というのではなく、「ウィンドウ名」と呼ぶのが正しかったんですね。

でもWSHにActiveXを挟んだりするくらいなら、ご提示いただいたAPIを直接つつくVBのプログラムを作ろうかな...という気になってきましたが、時間がありませんのでここで質問を終了させていただき、とりあえず、次のようなスクリプトでしのぐことにします。

ご回答ありがとうございました!

Set objArgs = WScript.Arguments

Select Case objArgs.Count

Case 2

rem 稼動チェックしたいウィンドウ名称

strWindowName = objArgs.Item(0)

rem 稼動させたいプログラム名称

strProgramName = objArgs.Item(1)

Case Else

WScript.Echo ”引数が足りません”

WScript.Echo ”Usage: cscript //Nologo checkprocess.vbs WindowName ProgramName”

End Select

Set WshShell = CreateObject(”WScript.Shell”)

RetCode = WshShell.AppActivate( strWindowName )

If RetCode <> ”True” Then

Set WshShell = WScript.CreateObject(”WScript.Shell”)

r = WshShell.Run( Chr(34) & strProgramName & Chr(34), 1, true )

End If

2005/07/14 16:48:56

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません