예를 들어 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;
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;
'Delphi' 카테고리의 다른 글
[Delphi] 핫키 등록하고 내가 쓰기 (0) | 2010.05.04 |
---|---|
[Delphi] ContextMenu, FindWindow (0) | 2010.04.29 |
[Delphi] DLL의 Form의 Deactivate 처리 (0) | 2010.04.26 |
[Delphi] 다른 어플리케이션에 Ctrl+V 보내기 (0) | 2010.04.26 |
[Delphi] 프로세스 실행시킨 후 해당 프로세스 종료시 같이 종료하기 (0) | 2010.04.26 |