>>*======================================================================================== >>* 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 >>