6.Shell関数で起動したプログラムの終了を待つ |
1.Shell関数で起動したプログラムの終了を待つ(Win32API 関数を使った方法) 2.Shell関数で起動したプログラムの終了を待つ(WshShell オブジェクトを使った方法) 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定:MyWaitDll 使用 API:OpenProcess GetExitCodeProcess CloseHandle その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。 :
|
1.Shell関数で起動したプログラムの終了を待つ(074) 2002.05.16 |
Option Explicit '既存のプロセスオブジェクトのハンドルを取得(P665) Private Declare Function OpenProcess Lib "kernel32" _ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As Long '指定のプロセスの終了コードを取得(P660) Private Declare Function GetExitCodeProcess Lib "kernel32" _ (ByVal hProcess As Long, lpExitCode As Long) As Long '開かれているオブジェクトのハンドルを解放する(P1252) Private Declare Function CloseHandle Lib "kernel32" _ (ByVal hObject As Long) As Long Private Const PROCESS_QUERY_INFORMATION = &H400& Private Const STILL_ACTIVE = &H103& Private Sub ShellEnd(ProcessID As Long) Dim hProcess As Long Dim EndCode As Long Dim EndRet As Long 'ハンドルを取得する hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 1, ProcessID) '終わるまで待つ Do EndRet = GetExitCodeProcess(hProcess, EndCode) Wait 50 '指定時間待つ、待機関数 を参照 ' DoEvents 'CPU 使用率がUPします。 Loop While (EndCode = STILL_ACTIVE) 'ハンドルを閉じる EndRet = CloseHandle(hProcess) End Sub Private Sub Command1_Click() 'メモ帳を起動し、終了したら電卓を起動する Dim Ret1 As Long Dim Ret2 As Long Ret1 = Shell("C:\windows\system32\notepad.exe", 1) 'Ret1 = Shell("C:\WINDOWS\notepad.exe", 1) ShellEnd (Ret1) '終了するまで待機 MsgBox ("メモ帳が終了しました。") Ret2 = Shell("C:\windows\system32\CALC.EXE", 1) 'Ret2 = Shell("C:\WINDOWS\CALC.EXE", 1) ShellEnd (Ret2) MsgBox ("電卓が終了しました。") End Sub |
2.Shell関数で起動したプログラムの終了を待つ(WshShell オブジェクトを使った方法) |
Private Sub Command2_Click() 'WshShell オブジェクトを使った方法(こちらの方が簡単) Dim objWshShell As Object Dim Ret As Long Set objWshShell = CreateObject("WScript.Shell") Ret = objWshShell.Run("C:\windows\system32\notepad.exe", 1, True) MsgBox ("メモ帳が終了しました。") Ret = objWshShell.Run("C:\windows\system32\CALC.EXE", 1, True) Set objWshShell = Nothing MsgBox ("電卓が終了しました。") End Sub WshShell オブジェクトが使える環境ならこちらの方が簡単ですのでこちらのサンプルをご利用下さい。 |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
外部アプリが終了するまで待機 プログラムが終了したかどうかを判断する VBから起動したプログラムが終了したかどうか確認する 起動したアプリケーションの終了を取得する |