關於發送按鍵後等待一個窗體被調出的問題 |
答題得分者是:Mickey
|
KFC123_60201
一般會員 發表:58 回覆:18 積分:15 註冊:2006-07-25 發送簡訊給我 |
我寫了一個小程序向另一個外部主程序發送一個按鍵組合(Shift-Ctrl-S) 來調出一個dialog,這個dialog上有三個buttons,我再用EnumChildWindows找出其中字串為'Yes'的那一個,然後向它發送模擬點襲的動作。我的程序片斷如下
// RefHND 是外部程序的handle SetForegroundWindow(RefHND); keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), 0, 0); keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0); keybd_event(Ord('S'), MapVirtualKey(Ord('S'), 0), 0, 0); keybd_event(Ord('S'), MapVirtualKey(Ord('S'), 0), KEYEVENTF_KEYUP, 0); keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0); keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), KEYEVENTF_KEYUP, 0); // 到這為止,那個dialog是成功被調出來 // 下面這一段是找出Dialog的handle,如果成功,將得到 DialogHND GotIt := EnumChildWindows(RefHND, @EnumWindowsDialogProc, 0); if (GotIt) and (DialogHND>0) then begin // 再通過 EnumChildWindows 找出 Dialog 上的'Yes' Button, YesBtnHND 代表相應的handle GotIt := EnumChildWindows(DialogHND, @EnumYesButton, 0); if (GotIt) then begin SendMessage(YesBtnHND, WM_LBUTTONDOWN, 0, 0); SendMessage(YesBtnHND, WM_LBUTTONUP, 0, 0); end; end; 如果我事先在外部主程序上調出我要的dialog,然後用面這段程序來找出yes button是沒問題。但是如果,dialog是由我的程序來調出,那麼就無法找到yes button。我覺得原因是我調用keybd_event調出dialog後,當dialog還沒有顯示出來以前程序就調用EnumChildWindows去尋找dialog,所以總是找不到。請問怎樣在keybd_event發送按鍵後,等到那個dialog調出後程序才往下走? 謝謝 |
KFC123_60201
一般會員 發表:58 回覆:18 積分:15 註冊:2006-07-25 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
幫你爬文, 參考一下這個範例
利用FindWindow將其他form物件下所有的資料取出來 http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=30409 |
KFC123_60201
一般會員 發表:58 回覆:18 積分:15 註冊:2006-07-25 發送簡訊給我 |
謝謝了,我原來就是參考那遍文章來寫代碼。但我的情況跟作者給的例子不同,他是先用FindWindow找出窗體的handle,然後再用EnumChildWindow找出該窗體下所有的components。但我的情況有所不同,我先要找出一個主窗體的handle,然後發送一個快捷鍵調出一個dialog,這個dialog不是包含在主窗體下的components,應該不能用enumchildwindows把它的handle找出來。現在我知道的信息是:1) 這個dialog由主窗體調出,而主窗的handle我是知道的 2) 這個dialog的caption是人已知的。雖然,我可以用FindWindow或EnumWindow的方法直接從dekstop中找出我想要的這個dialog,但這樣會有一個問題,因為desktop上可能有多個caption相同的windows,而我要的只是那個由主窗體調出來的dialog。
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |