偵測某視窗啟動的問題 |
尚未結案
|
DBIN
一般會員 發表:5 回覆:7 積分:2 註冊:2005-04-12 發送簡訊給我 |
各位大大安安: 有個問題想請教 ^^" 小弟寫個自動化執行 "其他程式" 的程式 //執行 MENU 上的開啟舊檔
PostMessage(handle, WM_COMMAND,MenuId, 0); HWND hwndD;
//確認 開啟舊檔 視窗已啟動並取得其 Handle
do{hwndD = ::FindWindowEx(NULL,NULL,NULL,"開啟舊檔");}
while(!::IsWindow(hwndD)); //繼續執行下面的動作
..... 利用 do while 的方式可以達到偵測視窗開啟的動作可是有兩個問題 1.若視窗無法開啟將造成死結
2.do while 狂跑會把 CPU 操死,降低整體執行效率 小弟想過是否另外開個執行序來做偵測的動作 例如:VB.NET 下 t.join(3000)
執行某 Thread 去判斷視窗是否開啟,若不開啟三秒後 KO 掉這個 Thread 然後傳回錯誤,請教 C 下該如何做,或者有其他更簡單的作法?感恩!! ^^"
|
blk5743
高階會員 發表:34 回覆:371 積分:236 註冊:2003-11-17 發送簡訊給我 |
|
DBIN
一般會員 發表:5 回覆:7 積分:2 註冊:2005-04-12 發送簡訊給我 |
引言: DBIN你好 你可以在你的do~while迴圈中加一個delay的時間 如Sleep(1000);//暫停一秒 並且可以設定timeout的時間,例如60秒 則用個變數再你的迴圈每做一次加一,到60後就break; 基本上,應該不會有人無限制的等待吧感謝 blk5743 前輩的建議,小弟一直不想設 Sleep 的原因是因為會造成系統效率的降低,而且可能因為電腦效能的不同處理這個事件的時間也會不一樣, 不過在迴圈設定變數若超過一定數量跳出的方法小弟會考慮,目前嘗試用 WaitForInputIdle(pi.hProcess, INFINITE); WaitForSingleObject(pi.hProcess, INFINITE); 來做,可是不知道怎ㄇ入手,若其他前輩有這部分相關的經驗或建議都希望可以提供給小弟喔,有偵測 Handle 是否出現類似上面兩個偵測 Process 的方法ㄇ^^" |
rogan321
高階會員 發表:21 回覆:307 積分:200 註冊:2003-05-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |