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

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

●質問者: moochin2004
●カテゴリ:コンピュータ
✍キーワード:WSH アプリケーション タスク プロセス 名称
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● akibare
●30ポイント

http://www.windowsitpro.com/Articles/Print.cfm?ArticleID=15643

Login / Subscribe

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

http://msdn.microsoft.com/library/default.asp?url=/library/en-us...

こちら入門編

http://msdn.microsoft.com/library/default.asp?url=/library/en-us...

プロセスのクラス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のほかのクラスを探しても「タスク」はなさそう。

◎質問者からの返答

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

set WshShell = CreateObject(”WScript.Shell”)

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

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

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

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


2 ● andi
●30ポイント

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

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

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


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

◎質問者からの返答

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

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

でも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

関連質問


●質問をもっと探す●



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