Для тех, кто все еще подвергается VB6 в наше продвинутое время, я хотел бы опубликовать наиболее полный пример. Код, приведенный на следующем сайте, великолепен: http://vbnet.mvps.org/index.html?code/faq/waitforsingleobject2.htm,, но вы должны соединить 2 примера вместе, чтобы получить рабочий бит, который будет ожидать выхода очищенного приложения, не входя в цикл с интенсивным использованием ЦП, и получить правильный код выхода.
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const SYNCHRONIZE = &H100000
Private Const WAIT_INFINITE = -1&
Private Const PROCESS_QUERY_INFORMATION = &H400
ProcessId = Shell("D:\iwCode\dev\proj\appmanager\MoveIniFileUtil\bin\Debug\MoveIniFileUtil.exe 5", vbNormalFocus)
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or SYNCHRONIZE, True, ProcessId)
dummyRet = WaitForSingleObject(hProcess, WAIT_INFINITE)
GetExitCodeProcess hProcess, exitCode
CloseHandle hProcess
MsgBox exitCode
Важным моментом, который не был для меня сразу очевидным, было то, что вы должны вызывать функцию OpenProcess с флагами SYNCHRONIZE и PROCESS_QUERY_INFORMATION Or вместе, чтобы это работало.