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

Digg it! Print this record Send to a friend Show this as PDF file
Propose a translation for Propose a translation for
Please rate this entry:

Average rating: 0 out of 5 (0 Votes )

completely useless 1 2 3 4 5 most valuable

You can comment on this entry