请教各位仁兄:程序需要等待外部程序中的某个对话窗口出现,在确认出现以后才能继续执行后面的代码,如何写这一段程序呢? |
|
lkdbdlkq
一般會員 發表:12 回覆:0 積分:2 註冊:2006-08-05 發送簡訊給我 |
|
washare
初階會員 發表:14 回覆:36 積分:35 註冊:2006-10-17 發送簡訊給我 |
//方法就是用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 發送簡訊給我 |
這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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |