他のプログラムの終了を待つには |
Shell関数で起動したプログラムの終了を待つ (074) | |
次の2行を続けることで、DosのBATファイルのようにできます。 ret1 = Shell("C:\WINDOWS\notepad.exe", 1) ShellEnd (ret1) 下記のコードでは、まずメモ帳を起動して、メモ帳が閉じられるまで待ちます。メモ帳が終了すると、電卓を起動し、終了するまで待ちます。待ち時間の間は他の処理を受け付けます。 Option Explicit 'SampleNo=074 WindowsXP VB6.0(SP5) 2002.05.16
'既存のプロセスオブジェクトのハンドルを取得(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) DoEvents 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 |
2002/05/16