Windows API
ID #1030
How to know if process run by ShellExecute had been terminated?
Below function realises the required task:
RunJob FUNCTION(*CSTRING ProgramName,*CSTRING Param) PROC::ID STRING('RunJob') SW_HIDE EQUATE(0) WE WinError RetVal ULONG ExitCode ULONG INFINITE EQUATE(0FFFFFFFFh) WAIT_FAILED EQUATE(0FFFFFFFFh) STARTF_USESHOWWINDOW EQUATE(00000001h) SI GROUP(STARTUPINFO). PI GROUP(PROCESS_INFORMATION). ProgPar CSTRING(SIZE(FIL:ProgramName) + SIZE(FIL:Parameters))
CODE WE.Init() ProgPar = ProgramName & ' ' & Param ! memset(ADDRESS(SI),0,SIZE(SI)) SI.StructSize = SIZE(SI) SI.Flags = STARTF_USESHOWWINDOW SI.ShowWindow = SW_HIDE Loging( PROC::ID & ' Starting Job ' & ProgPar) UNLOCKTHREAD() IF CreateProcess(0,ADDRESS(ProgPar),0,0,FALSE,0,0,0,ADDRESS(SI),ADDRESS(PI)) IF WaitForSingleObject(PI.hProcess,INFINITE) RetVal = WE.GetError() ELSE Loging( PROC::ID & ' Job ' & ProgramName & ' ended successful') IF ~GetExitCodeProcess(PI.hProcess, ADDRESS(ExitCode)) RetVal = WE.GetError() Loging( PROC::ID & ' Error posted during ' & ProgramName) END END ELSE RetVal = WE.GetError() Loging( PROC::ID & ' Error posted during ' & ProgramName) END LOCKTHREAD() WE.Kill()
Tags: shellexecute, process, terminate
Related entries:
Last update: 2007-07-17 10:39
Author: Andrew Listiev
Revision: 1.0
You can comment on this entry