起動させたアプリケーションの終了を知る(T) <TOP>
例ではメモ帳を起動し、それが終了したことをメッセージボックスに表示させています。
WaitForSingleObject 指定された時間が経過するまでスレッドをスリープ
CreateProcess プロセスの起動
CloseHandle オープンされているオブジェクトハンドルをクローズ
GetExitCodeProcess 指定プロセスの終了コードを取得
左:メモ帳起動ボタンをクリック 右:処理後、メモ帳を終了させる
下:終了したことが通知される
参考(・・というより丸写し)
http://support.microsoft.com/default.aspx?scid=KB;en-us;q129796
'================================================================ '= アプリケーションを起動し終了したことを得る(T) '= 参考:http://support.microsoft.com/default.aspx?scid=KB;en-us;q129796 '= (GetExitCodeProcess.bas) '================================================================ #include "Windows.bi" Type STARTUPINFO cb As Long lpReserved As Long lpDesktop As Long lpTitle As Long dwX As Long dwY As Long dwXSize As Long dwYSize As Long dwXCountChars As Long dwYCountChars As Long dwFillAttribute As Long dwFlags As Long wShowWindow As Integer cbReserved2 As Integer lpReserved2 As Long hStdInput As Long hStdOutput As Long hStdError As Long End Type Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessID As Long dwThreadID As Long End Type ' 指定されたカーネルオブジェクトがシグナル状態になるか、指定された時間が経過するまでスレッドをスリープ Declare Function Api_WaitForSingleObject& Lib "Kernel32" Alias "WaitForSingleObject" (ByVal hHandle&, ByVal dwMilliseconds&) ' プロセスの起動 Declare Function Api_CreateProcess& Lib "kernel32" Alias "CreateProcessA" (ByVal aNm$, ByVal ComLine$, ByVal ProcAttr&, ByVal thAttr&, ByVal Handl&, ByVal Flags&, ByVal Environ&, ByVal Dir$, StartupInfo As STARTUPINFO, ProcInfo As PROCESS_INFORMATION) ' オープンされているオブジェクトハンドルをクローズ Declare Function Api_CloseHandle& Lib "Kernel32" Alias "CloseHandle" (ByVal hObject&) ' 指定プロセスの終了コードを取得 Declare Function Api_GetExitCodeProcess& Lib "kernel32" Alias "GetExitCodeProcess" (ByVal hProcess&, lpExitCode&) #define NORMAL_PRIORITY_CLASS &H20 '通常クラス(一般的なプロセス) #define INFINITE &HFFFF '無限に中断 Var Shared Button1 As Object Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Function ExecCmd(cmdline$) function ExecCmd(cmdline$) Var pi As PROCESS_INFORMATION Var si As STARTUPINFO Var Ret As Long 'STARTUPINFO構造体の初期化 si.cb = Len(start) 'アプリケーション起動 Ret = Api_CreateProcess(ByVal 0, cmdline$, 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, ByVal 0, si, pi) '起動されたアプリケーションが終了するまで待つ Ret = Api_WaitForSingleObject(pi.hProcess, INFINITE) Ret = Api_GetExitCodeProcess(pi.hProcess, Ret) Ret = Api_CloseHandle(pi.hThread) Ret = Api_CloseHandle(pi.hProcess) ExecCmd = Ret End Function '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var Ret As Long 'メモ帳を起動 Ret = ExecCmd("notepad.exe") A% = MessageBox("", "プロセスは終了しました!。終了コード:" & Str$(Ret), 0, 2) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End