Set WS = WScript.CreateObject("WScript.Shell") Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator") 'SWbemLocatorオブジェクト作成 Set oService = Locator.ConnectServer 'SWbemServicesオブジェクト取得 Set oProcess = oService.Get("Win32_Process") '空のProcessオブジェクト取得 result = oProcess.Create ("notepad",null,null,processid) 'Processの作成(メモ帳起動) If result <> 0 Then '実行が失敗すれば終了 WScript.Quit End If On Error Resume Next 'ここからエラー処理を有効に。 Set oEvent = oService.ExecNotificationQuery _ ("select * from __InstanceDeletionEvent within 1 " & _ "where targetinstance isa 'Win32_Process' " & _ "and targetinstance.Name = 'notepad.exe' ") 'イベントクラス(__InstanceDeletionEventクラス。 'インスタンスの削除イベント)の作成。 'within 1 …該当イベントを1秒間隔でポーリング 'where targetinstance isa 'Win32_Process' …Win32_Processクラスのインスタンスを監視対象にする 'targetinstance.Name = 'notepad.exe' …インスタンス名が、notepad.exeであるものを選ぶ Do WS.Run "%comspec% /c tasklist.exe -v /FO CSV /FI ""IMAGENAME eq notepad.exe"" > x:\app.log",0,True WScript.Sleep 1500 'ループをまわしとく。1500msec 待つ。 Set oEvt = oEvent.NextEvent(500) 'SWbemEventSourceオブジェクトのNextEventメソッド。 '500msecでタイムアウトする。 If Err.Number = -2147209215 Then 'タイムアウトすると、上記のエラー発生。 Err.Clear Else 'エラーが発生しない場合は、正常に終了したということとなる。 'MsgBox oEvt.TargetInstance.ExecutablePath & "が終了しました。" 'SWemObject(__InstanceDeletionEventクラス)のTargetInstanceプロパティ 'は、ターゲットインスタンスを返す。この場合はWin32_Processクラスのインスタンス。 Exit Do End If Loop