全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1377
推到 Plurk!
推到 Facebook!

请教各位仁兄:程序需要等待外部程序中的某个对话窗口出现,在确认出现以后才能继续执行后面的代码,如何写这一段程序呢?

 
lkdbdlkq
一般會員


發表:12
回覆:0
積分:2
註冊:2006-08-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-10-27 18:36:17 IP:61.53.xxx.xxx 未訂閱
用createprocess 及waitforinputidle、waitforsingleobject的方法可以等待外部程序整体运行的结果,可是我现在只是需要等待外部程序中的某个对话框的状态,只要一发现对话框出现,程序立即继续执行下面的代码,否则的话就处于等候状态。 请问各位仁兄,如何实现这样的功能呢?
washare
初階會員


發表:14
回覆:36
積分:35
註冊:2006-10-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-11-10 07:22:37 IP:203.204.xxx.xxx 訂閱
 //方法就是用FindWindow,程式碼只從已前寫的source剪貼出來的,沒跑過
//大概是這樣用就是了

h=0;

while h=0 do
begin
h := FindWindow(nil,pchar('your windown Title'));
if H<>0 then
break
else
StartWait(500) //等0.5秒再做一次待中

end;
do something....

procedure TDEMO.StartWait(Atime:Integer);
begin
form1.Timer2.Interval:=ATime 100;
GWaitTimeUp:=false;
form1.Timer2.Enabled:=true;
Application.ProcessMessages;
while not GWaitTimeUp do
begin
if GStop or Terminated then
begin
break;
GAllReVote:=false;
end;
Application.ProcessMessages;
end;
end;

japhen
中階會員


發表:2
回覆:57
積分:71
註冊:2006-08-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-11-22 14:49:04 IP:125.229.xxx.xxx 未訂閱
這function給你參考看看,在被你叫起的程式結束前,你的主程式會處於suspanded狀態,傳入參數就是你想要運行的程序完全文件名

function ExecuteAndWait(const CommandLine : string) : cardinal;
var
tSI : TStartupInfo;
tPI : TProcessInformation;
dwI : DWORD;
begin
Result := ErrUINT;
FillChar(tSI, sizeof(TStartupInfo), 0);
tSI.cb := sizeof(TStartupInfo);
tSI.wShowWindow:=SW_SHOW;
if (CreateProcess(nil, pchar(CommandLine), nil, nil, False, CREATE_NEW_PROCESS_GROUP or NORMAL_PRIORITY_CLASS or 0, nil, nil, tSI, tPI)) then begin
dwI := WaitForSingleObject(tPI.hProcess, INFINITE);
if (dwI = WAIT_OBJECT_0) then
if (GetExitCodeProcess(tPI.hProcess, dwI)) then Result := dwI;
CloseHandle(tPI.hProcess);
CloseHandle(tPI.hThread);
end;
end;

------
歡迎在大陸的台商加入我們的行列
台商小棧 www.twgocn.com
系統時間:2024-04-25 3:35:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!