Vì vậy, tôi đã tạo một biểu mẫu trong Delphi cho phép tôi chạy các tập lệnh sikuli khác nhau với các cấu hình khác nhau. Những gì tôi đang làm bây giờ là làm cho nó có thể cho một ai đó sử dụng biểu mẫu, để thiết lập các tập lệnh sikuli khác nhau để chạy trên một tập lệnh khác. Như trong:Làm cách nào để đợi cho đến khi quá trình bên ngoài hoàn tất?
Bước 1: SikuliScript1 với ConfigFile1. Bước 2: SikuliScript2 với ConfigFile2. vv ... Đây là mã của tôi cho đến nay:
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;
Và điều này làm việc hoàn hảo, kịch bản sikuli chạy một cách hoàn hảo, và trong khi chạy, dòng cmd có thể nhìn thấy với những hành động khác nhau chỉ ra rằng đang được thực hiện. Sau khi tập lệnh sikuli được thực hiện, dòng cmd tự đóng lại. Vì vậy, trình xử lý shell biết khi nào tắt quá trình chạy. Vì vậy, câu hỏi của tôi là: Có thể nói với delphi: Sau khi xử lý đã đóng cửa quá trình, chạy quá trình tiếp theo (Sikuli Script)? Bây giờ tôi biết tôi có thể đi với toàn bộ createProcess trong delphi, nhưng nó chỉ có vẻ quá mức cần thiết. Đã có một cách để làm điều này nhanh hơn và dễ dàng hơn. Bất cứ ai cũng có một đầu mối?
Nếu bạn muốn bơm hàng đợi, hãy sử dụng 'MsgWaitForMultipleObjects' tốt hơn. Ngoài ra, bạn đang bị rò rỉ xử lý. Hai cho mọi cuộc gọi đến hàm đó. –
Tại sao lại là downvote? – OnTheFly
@DavidHeffernan Tại sao lại là downvote? Bạn đúng về các tay cầm (xấu của tôi) nhưng nó đưa ra một giải pháp cho câu hỏi, chạy một tiến trình sau cái kia. –