#ifndef STILL_ACTIVE #define STILL_ACTIVE 0x00000103 #endif #if _ISCRIPT_VER < 0x600 #ifndef BYVAL #define BYVAL #endif #endif export prototype _LaunchAppEx(STRING, STRING, NUMBER, NUMBER, NUMBER, BYREF NUMBER); prototype BOOL kernel32.CreateProcessA(POINTER, BYVAL STRING, POINTER, POINTER, BOOL, NUMBER, POINTER, POINTER, POINTER, POINTER); prototype BOOL kernel32.GetExitCodeProcess(NUMBER, POINTER); prototype NUMBER kernel32.WaitForSingleObject(NUMBER, NUMBER); prototype BOOL kernel32.CloseHandle(HWND); typedef STARTUPINFO begin NUMBER cb; POINTER lpReserved; POINTER lpDesktop; POINTER lpTitle; NUMBER dwX; NUMBER dwY; NUMBER dwXSize; NUMBER dwYSize; NUMBER dwXCountChars; NUMBER dwYCountChars; NUMBER dwFillAttribute; NUMBER dwFlags; NUMBER wShowWindow; POINTER lpReserved2; HWND hStdInput; HWND hStdOutput; HWND hStdError; end; typedef PROCESS_INFORMATION begin NUMBER hProcess; HWND hThread; NUMBER dwProcessId; NUMBER dwThreadId; end; function _LaunchAppEx(szProgram, szCmdLine, nWait, nShow, nTimeOut, nvExitCode) STARTUPINFO siData; PROCESS_INFORMATION piData; begin siData.cb = 68; siData.lpReserved = NULL; siData.lpDesktop = NULL; siData.lpTitle = NULL; siData.dwX = 0; siData.dwY = 0; siData.dwXSize = 0; siData.dwYSize = 0; siData.dwXCountChars = 0; siData.dwYCountChars = 0; siData.dwFillAttribute = 0; siData.dwFlags = 1; siData.wShowWindow = nShow; siData.lpReserved2 = NULL; siData.hStdInput = NULL; siData.hStdOutput = NULL; siData.hStdError = NULL; if (CreateProcessA(NULL, szProgram + " " + szCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &siData, &piData) = 0) then return (-1); endif; if ( nWait != WAIT ) then nvExitCode = 0; return 0; endif; WaitForSingleObject(piData.hProcess, nTimeOut); GetExitCodeProcess(piData.hProcess, &nvExitCode); CloseHandle(piData.hProcess); CloseHandle(piData.hThread); return 0; end;