所以我在Delphi中做了一個表單,它允許我運行各種配置的sikuli腳本。我現在的工作就是讓使用該表單的人可以設置各種sikuli腳本以便一個接一個地運行。如在:如何等待外部過程完成?
步驟1:SikuliScript1與ConfigFile1。 步驟2:帶ConfigFile2的SikuliScript2。 等等 這是我到目前爲止的代碼:
procedure TSikRunForm.btnRunClick(Sender: TObject);
begin
DirCombo:= '/C '+DirSik+'\sikuli-script.cmd' +' -r ' + DirScript + ' --args '+DirConfig;
if SikFound then begin
ShellExecute(Handle, nil, 'cmd.exe', pChar(DirCombo), nil, SW_SHOWNORMAL);
Application.minimize;
end else begin
ShowMessage('Select the correct folder for your Sikuli installation folder');
end;
end;
而這完美的作品中,Sikuli腳本完美運行,並且運行時,CMD線與正在執行所示的各種動作可見。 sikuli腳本完成後,cmd行將自行關閉。所以shell處理程序知道何時關閉正在運行的進程。所以我的問題是:是否可以告訴delphi:處理程序關閉了進程後,運行下一個進程(Sikuli腳本)? 現在我知道我可以在delphi中使用整個createProcess,但它看起來似乎過分。必須有一種方法可以更快,更輕鬆地完成此項任務。 任何人都有線索?
如果你想抽取隊列,最好使用'MsgWaitForMultipleObjects'。此外,你正在泄漏手柄。每次調用該函數兩次。 –
爲什麼downvote? – OnTheFly
@DavidHeffernan爲什麼downvote?你對手柄(我的壞)是正確的,但它確實給出瞭解決問題的辦法,一個接一個地運行一個進程。 –