*======================================================================================== * Executes another application, waits for it to complete and returns the error level *======================================================================================== LParameter tcCmdLine *-------------------------------------------------------------------------------------- * API declarations *-------------------------------------------------------------------------------------- DECLARE INTEGER CreateProcess IN kernel32.DLL ; String lpApplicationName, ; STRING lpCommandLine, ; INTEGER lpProcessAttributes, ; INTEGER lpThreadAttributes, ; INTEGER bInheritHandles, ; INTEGER dwCreationFlags, ; String lpEnvironment, ; String lpCurrentDirectory, ; STRING @lpStartupInfo, ; STRING @lpProcessInformation Declare long GetLastError in Win32API *-------------------------------------------------------------------------------------- * Launch the application *-------------------------------------------------------------------------------------- Local lcStartupInfo, lcProcessInfo, lnOK lcStartupInfo = ; BINTOC(68,"RS") + ; Replicate(Chr(0),40) + ; BinToC(1,"RS") + ; BinToC(0,"2RS") + ; && SW_HIDE BinToC(0,"2RS") + ; Replicate(Chr(0),16) lcProcessInfo = Replicate(Chr(0),16) lnOK = CreateProcess( ; NULL, ; m.tcCmdLine, ; 0, ; 0, ; 1, ; 0x20, ; NULL, ; NULL, ; @lcStartupInfo, ; @lcProcessInfo ; ) *-------------------------------------------------------------------------------------- * Extract the handles from the PROCESSINFO structure *-------------------------------------------------------------------------------------- Local lnProcessHandle, lnThreadHandle If m.lnOK == 0 Return -1 Else lnProcessHandle = CTOBIN(Substr(m.lcProcessInfo,1,4),"RS") lnThreadHandle = CTOBIN(Substr(m.lcProcessInfo,5,4),"RS") EndIf *-------------------------------------------------------------------------------------- * Wait for the process to terminate *-------------------------------------------------------------------------------------- Declare Long WaitForSingleObject in Win32API Long, Long WaitForSingleObject( m.lnProcessHandle, -1 ) *-------------------------------------------------------------------------------------- * Get the error code *-------------------------------------------------------------------------------------- Local lnExitCode lnExitCode = -1 Declare Long GetExitCodeProcess in Win32API ; Long hProcess, ; Long @lpExitCode GetExitCodeProcess( m.lnProcessHandle, @lnExitCode ) *-------------------------------------------------------------------------------------- * Close handles *-------------------------------------------------------------------------------------- Declare CloseHandle in Win32API Long CloseHandle( m.lnProcessHandle ) CloseHandle( m.lnThreadHandle ) Return m.lnExitCode