Embarcadero Delphi
他のプログラムの実行
サーチ…
CreateProcess
次の関数は、 CreateProcess
Windows APIを使用して他のプログラムを起動するコードをカプセル化します。
これは設定可能で、呼び出しプロセスが終了するか、すぐに戻るまで待つことができます。
パラメーター:
-
FileName
- 実行可能ファイルへのフルパス -
Params
- コマンドラインパラメータまたは空の文字列を使用する -
Folder
- 呼び出されたプログラムの作業フォルダ - 空のパスがFileName
から抽出される場合 -
WaitUntilTerminated
- trueの場合、関数はプロセスの実行が完了するまで待機する -
WaitUntilIdle
- trueの場合、関数はWaitForInputIdle関数を呼び出し、指定されたプロセスが初期入力の処理を完了し、ユーザー入力が保留されなくなるまで待機する -
RunMinimized
- 真のプロセスが最小化されて実行される場合 -
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