コマンドラインパラメータでプログラムを実行しました。どのように私はそれが実行を終了するのを待つことができますか?コマンドラインプログラムが終了するのを待つ方法はありますか?
答えて
これが私の答えされています(すべてのいただきありがとうございます)
uses ShellAPI;
function TForm1.ShellExecute_AndWait(FileName: string; Params: string): bool;
var
exInfo: TShellExecuteInfo;
Ph: DWORD;
begin
FillChar(exInfo, SizeOf(exInfo), 0);
with exInfo do
begin
cbSize := SizeOf(exInfo);
fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
Wnd := GetActiveWindow();
exInfo.lpVerb := 'open';
exInfo.lpParameters := PChar(Params);
lpFile := PChar(FileName);
nShow := SW_SHOWNORMAL;
end;
if ShellExecuteEx(@exInfo) then
Ph := exInfo.hProcess
else
begin
ShowMessage(SysErrorMessage(GetLastError));
Result := true;
exit;
end;
while WaitForSingleObject(exInfo.hProcess, 50) <> WAIT_OBJECT_0 do
Application.ProcessMessages;
CloseHandle(Ph);
Result := true;
end;
WaitForSingleObject()の代わりにMsgWaitForMultipleObjects()を使用して、Application.ProcessMessages()を不必要に呼び出さないようにしてください。頻繁に行うと、ループ実行中にアプリのパフォーマンスが低下する可能性があります。 –
私はスレッドでそれを使用します!したがって、アプリケーション。ProcessMessages;削除されます! – Kermia
MsgWaitForMultipleObjectsは実際にはより良い解決策になりそうです。あなたがそうしたら、スレッドを待つだけです! –
[OK]を、コマンドラインパラメータを取得し、あなたは
ParamCount
を使用:コマンドライン上のプログラムに渡されたパラメータの数を返します。
ParamStr
:インデックスによって要求される特定のパラメータを返します。 今Running Dephi Applications With Parameters
、何を意味すると読み、コンソールに書き込みを行っている場合、あなたは
WriteLn
を使用するには:コンソールへのテキストの行を書き込みます。
ReadLn
:コンソールから文字列として1行のテキストを読み込みます。 Delphi Basics
コマンドライン実行可能ファイルを実行し、このexeがコンソールに書き込む応答を取得するのが最も簡単な方法は、バッチファイルからexeファイルを呼び出し、出力を別のファイルにリダイレクトすることですファイル>
を使用して、そのファイルを読み取ります。
たとえば、あなたは「DIR」コマンドを実行し、その出力を取得する必要がある場合は、次のものが含まgetdir.bat
というバッチファイルを持つことができ:
@echo off
dir c:\users\myuser\*.* > output.txt
をあなたはAPIを使用して、そのバッチファイルをexecしことができは関数ShellExecute。あなたは
http://delphi.about.com/od/windowsshellapi/a/executeprogram.htmそれについて次にあなたもTStringListのようなものを使用して、出力ファイルを読むことができますを読むことができます:
var
output: TStringList;
begin
output := TStringList.Create();
output.LoadFromFile('output.txt');
...
私が正しくあなたの質問を理解していれば、あなたはコマンドラインでプログラムを実行し、そのをキャプチャしたいですコンソールウィンドウではなくアプリケーションで出力します。これを行うには、pipesを使用して出力を読み取ることができます。ここでは例のソースコードは次のとおりです。
DSiWin32を使用する:
sl := TStringList.Create;
if DSiExecuteAndCapture('cmd.exe /c dir', sl, 'c:\test', exitCode) = 0 then
// exec error
else
// use sl
sl.Free;
- 1. jQueryエフェクトが終了するまで待つ方法は?
- 2. TouchIDが終了するまで待つ方法は?
- 3. moongoseがクエリを終了するのを待つ方法は?
- 4. サブスクリプションのチェーンが終了するのを待つ方法は?
- 5. 特定のメソッドが別のメソッド内で終了するのを待つ方法はありますか?
- 6. アニメーターが終了するのを待つ方法は?
- 7. viewDidDisAppearでアニメーションが終了するのを待つ方法は?
- 8. io.popen - プロセスがLuaで終了するのを待つ方法は?
- 9. Windowsでプロセスが終了するのを待つ方法は?
- 10. トランザクションを待つ方法はJDOで終了しますか?
- 11. コマンドラインプログラムを終了する好ましい方法は何ですか?
- 12. Segueは、ディスパッチキューが終了するまで待つ必要があります
- 13. QTでプロセスが終了するまでkeyeventを待つ方法
- 14. ウィンドウの終了イベントを待つ方法
- 15. iOS/Swiftで関数が終了するまで待つ方法
- 16. Application.Calculateが終了するまで待つ
- 17. ユニットテストでアニメーションが終了するのを待つ方法
- 18. kivy-スレッドが終了するまで待つ必要があります
- 19. アンドロイドでオブザーバブルを終了するのを待つ方法は?
- 20. 子が終了するのを待つ
- 21. コルーチンが終了するのを待つ
- 22. プロセスが終了するのを待っているforループを保持する方法はありますか?
- 23. コマンドを実行する方法とアプリケーションの終了を待つことはありませんか?
- 24. プロセスの終了終了を待つ
- 25. SparkContextがすべての処理を終了するのを待つ方法は?
- 26. jQueryですべてのアニメーションが終了するのを待つ方法は?
- 27. JavaアプリケーションでElastic MapReduceジョブフローの完了を待つ方法はありますか?
- 28. コンソールアプリケーションの終了を防ぐ方法はありますか?
- 29. iPhone:ビデオが終了する前にMPMoviePlayerControllerを終了する方法はありますか?
- 30. メディアストリームが受信側で終了すると、ExpandedControllerActivityを終了する方法はありますか?
のために非常に明確であるか疑問言うカントは、私の... CLIの入力は 'stdin'から来て、' output'は 'stdout'(場合によっては' stderr')に行きます。プログラムの振る舞いの修飾子として機能するパラメータ –
現在のフォームが非常に不明なため、質問に言い換えてください。何を待っていますか?実行されたプログラムのコンソール出力?そのプログラムから送信されたWindowsメッセージ? –
私の悪い英語を申し訳ありません!私は答えを見つけた。あなたはページの下部にそれを見ることができます! – Kermia