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

無法在彈跳視窗中執行keybd_event

答題得分者是:herbert2
zolt
一般會員


發表:20
回覆:9
積分:5
註冊:2008-07-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-07-26 10:57:49 IP:61.219.xxx.xxx 訂閱
請問大家:

對於在BCB下要對彈跳視窗(只有"確定"和"取消"兩種按鍵,預設focus在"確定"鍵上)作自動化控制的正確方式究竟為何?
我試了兩個方法但都無法正常動作:
1. 直接在彈跳視窗出現後,使用keybd_event(VK_SPACE,0,0,0)和keybd_event(VK_SPCAE,0,KEYEVENTF_KEYUP)指令,
讓程式自動執行"確定"按鍵功能,但並沒有反應;
2. 參考http://delphi.ktop.com.tw/board.php?cid=30&fid=67&tid=97568修改執行後,發現在彈跳視窗出現後,我仍然必須要手動按下視窗按
鍵,程式才會執行之後Findwindow的動作(程式被彈出視窗卡住了?);

請問還忽略了哪些設定或步驟嗎?
想請大家幫忙提供建議了
謝謝!


herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-07-26 14:25:44 IP:202.39.xxx.xxx 訂閱
因為『彈跳視窗』通常是以 ShowModal() 方式啟動,故當它出現時,焦點必在其上預設的focus的"確定"鍵上,
所以您所使用的 keybd_event(....) 根本要等『彈跳視窗』關閉後才會執行。
同理,Findwindow() 的動作也是要等到『彈跳視窗』關閉後才會執行。

如果您確定要自動關閉該『彈跳視窗』,則建議在主程式中用:
變數_『彈跳視窗』傳回值 = 0;
if (狀況一) {
開啟『彈跳視窗』; // 等待操作人按確定或取銷;
變數_『彈跳視窗』傳回值數 = 『彈跳視窗』->ModalResult;
}
else {
不開啟『彈跳視窗』; // 類似自動按了確定
變數_『彈跳視窗』傳回值數 = mrOK;
}
if (變數_『彈跳視窗』傳回值 = mrOK) (
......
}
else {
......
}
的 方式,或許較為簡單。

編輯記錄
herbert2 重新編輯於 2012-07-26 00:35:42, 註解 無‧
zolt
一般會員


發表:20
回覆:9
積分:5
註冊:2008-07-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-07-27 09:18:33 IP:219.87.xxx.xxx 訂閱
謝謝herbert2的說明建議
我會再試試看,謝謝!


===================引 用 herbert2 文 章===================
因為『彈跳視窗』通常是以 ShowModal() 方式啟動,故當它出現時,焦點必在其上預設的focus的"確定"鍵上,
所以您所使用的 keybd_event(....) 根本要等『彈跳視窗』關閉後才會執行。
同理,Findwindow() 的動作也是要等到『彈跳視窗』關閉後才會執行。

如果您確定要自動關閉該『彈跳視窗』,則建議在主程式中用:
變數_『彈跳視窗』傳回值 = 0;
if (狀況一) {
開啟『彈跳視窗』; // 等待操作人按確定或取銷;
變數_『彈跳視窗』傳回值數 = 『彈跳視窗』->ModalResult;
}
else {
不開啟『彈跳視窗』; // 類似自動按了確定
變數_『彈跳視窗』傳回值數 = mrOK;
}
if (變數_『彈跳視窗』傳回值 = mrOK) (
......
}
else {
......
}
的 方式,或許較為簡單。

DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-07-27 10:53:34 IP:111.249.xxx.xxx 訂閱
 我在Timer中執行檢查異常視窗是可以的!

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