Embarcadero Delphi
다른 프로그램 실행
수색…
CreateProcess
다음 함수는 CreateProcess
Windows API를 사용하여 다른 프로그램을 시작하기위한 코드를 캡슐화합니다.
구성 가능하며 호출 프로세스가 완료되거나 즉시 리턴 될 때까지 대기 할 수 있습니다.
매개 변수 :
-
FileName
- 실행 파일의 전체 경로 -
Params
- 명령 줄 매개 변수 또는 빈 문자열 사용 -
Folder
- 호출 된 프로그램의 작업 폴더 - 빈 경로가FileName
에서 추출되는 경우 -
WaitUntilTerminated
- true의 경우, 프로세스가 실행을 완료 할 때까지 대기합니다. -
WaitUntilIdle
- true 함수가 WaitForInputIdle 함수를 호출하고 지정된 프로세스가 초기 입력 처리를 마칠 때까지 그리고 사용자 입력 보류가 없을 때까지 대기합니다. -
RunMinimized
- true 프로세스가 최소화 된 상태로 실행되면 -
ErrorCode
- 함수가 실패하면 발생하는 Windows 오류 코드가 포함됩니다.
function ExecuteProcess(const FileName, Params: string; Folder: string; WaitUntilTerminated, WaitUntilIdle, RunMinimized: boolean;
var ErrorCode: integer): boolean;
var
CmdLine: string;
WorkingDirP: PChar;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
Result := true;
CmdLine := '"' + FileName + '" ' + Params;
if Folder = '' then Folder := ExcludeTrailingPathDelimiter(ExtractFilePath(FileName));
ZeroMemory(@StartupInfo, SizeOf(StartupInfo));
StartupInfo.cb := SizeOf(StartupInfo);
if RunMinimized then
begin
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_SHOWMINIMIZED;
end;
if Folder <> '' then WorkingDirP := PChar(Folder)
else WorkingDirP := nil;
if not CreateProcess(nil, PChar(CmdLine), nil, nil, false, 0, nil, WorkingDirP, StartupInfo, ProcessInfo) then
begin
Result := false;
ErrorCode := GetLastError;
exit;
end;
with ProcessInfo do
begin
CloseHandle(hThread);
if WaitUntilIdle then WaitForInputIdle(hProcess, INFINITE);
if WaitUntilTerminated then
repeat
Application.ProcessMessages;
until MsgWaitForMultipleObjects(1, hProcess, false, INFINITE, QS_ALLINPUT) <> WAIT_OBJECT_0 + 1;
CloseHandle(hProcess);
end;
end;
위 함수의 사용법
var
FileName, Parameters, WorkingFolder: string;
Error: integer;
OK: boolean;
begin
FileName := 'C:\FullPath\myapp.exe';
WorkingFolder := ''; // if empty function will extract path from FileName
Parameters := '-p'; // can be empty
OK := ExecuteProcess(FileName, Parameters, WorkingFolder, false, false, false, Error);
if not OK then ShowMessage('Error: ' + IntToStr(Error));
end;
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow