예를 들어 CreateProcess로 생성한 ChildProcess의 윈도우와 통신하거나 할 때,
ChildProcess가 완전히 생성되었는지 알아보려고 할 때 사용할 수 있음.
원래는 어떤 프로세스가 Initialization이 끝나고 사용자 입력을 받을 준비가 될 때까지 기다리는 함수.



procedure MyCreateProcess(ProcName: String);
var
  SecAttr: TSecurityAttributes;
  ProcInfo: TProcessInformation;
  StartupInfo: TStartupInfo;
  cmd: array [0..1023] of WideChar;
begin
  SecAttr.nLength:=SizeOf(SecAttr);
  SecAttr.lpSecutiryDescriptor:=nil;
  SecAttr.bInheritHandle:=True;
 
  ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
  StartupInfo.cb:=SizeOf(StartupInfo);
  StartupInfo.dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
  StartupInfo.wShowWindow:=SW_SHOW;

  ZeroMemory(@cmd, SizeOf(cmd));
  StrCopy(cmd, PWideChar(ProcName));

  CreateProcess(nil, cmd, @SecAttr, @SecAttr, True, DETACHED_PROCESS or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcInfo);
  WaitForInputIdle(ProcInfo.hProcess, INFINITE);
end;







Posted by bloodguy
,