連携 Shell関数で実行したアプリ(タスク)の終了を認識する関数
※より実装に近く表示させる為、コードの改行を避けています。スマホ等で閲覧される際は向きを変えてご覧ください。
※実装するバージョンによってはバージョンアップの仕様により動作しないコードもあります。実装には動作確認の上ご使用下さい。
ここでは2つの方法を紹介しています。 |
'①Win32 API関数を使い終了を認識する Public Declare Function GetExitCodeProcess Lib "kernel32" _ (ByVal hProcess As Long, lpExitCode As Long) As Long Public Declare Function OpenProcess Lib "kernel32" _ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _ ByVal dwProcessID As Long) As Long Public Const PROCESS_QUERY_INFORMATION = &H400 Function TaskQuitForAPI(strTaskPath As String) As Boolean '****************************************************** 'Shell関数で実行したアプリ(タスク)の終了を認識する関数 '****************************************************** '上記Win32 API 関数を使用 '本関数内でShellを実行している為、返値は何でも良いがBooleanを使用 Dim dwProcessID As Long Dim hProcess As Long Dim lpdwExitCode As Long Dim ret As Long '実行及びタスクIDを取得 dwProcessID = Shell(strTaskPath, 1) 'ハンドル取得 hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, True, dwProcessID) Do 'プロセスの終了ステータスを取得 ret = GetExitCodeProcess(hProcess, lpdwExitCode) '終了するまで待機 DoEvents Loop While lpdwExitCode '++++++++++++++++++++++++++++++ 'ここまで来るとLoopを抜けたので '++++++++++++++++++++++++++++++ TaskQuitForAPI = True '返値を返す End Function Private Sub test() Dim strPath As String 'メモ帳のパス strPath = """C:\WINDOWS\NOTEPAD.EXE""" If TaskQuitForAPI(strPath) = True Then MsgBox "タスク" & vbCr & strPath & vbCr & "終了しました。" End If End Sub |
'②WScript.Shell(Windows Scripting Host)Runメソッドを使い終了を認識する Function TaskQuitForWSH(strTaskPath As String) As Boolean '****************************************************** 'Shell関数で実行したアプリ(タスク)の終了を認識する関数 '****************************************************** 'WScript.Shell(Windows Scripting Host)Runメソッドを使用 '本関数内でShellを実行している為、返値は何でも良いがBooleanを使用 'Runメソッドの引数 'WaitOnReturn=True-プロセス完了まで待機 CreateObject("WScript.Shell").Run strTaskPath, , True TaskQuitForWSH = True End Function Private Sub test2() Dim strPath As String 'メモ帳のパス strPath = """C:\WINDOWS\NOTEPAD.EXE""" If TaskQuitForWSH(strPath) = True Then MsgBox "タスク" & vbCr & strPath & vbCr & "終了しました。" End If End Sub |