請問我要如何送一個 TAB 鍵給元件? |
答題得分者是:jessechan
|
BGman
初階會員 發表:28 回覆:85 積分:42 註冊:2003-01-10 發送簡訊給我 |
|
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
|
lcsboy
版主 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
可以試試丟Message的方式
PostMessage(Memo1->Handle, WM_KEYDOWN, VK_TAB, 1); 也可以用keybd_event, 但是用這個方法正常的作法要丟keydown和keyup
也就是摸擬按鍵的行為要全部作完 <--- 沒作好會不會怎麼, 我是沒試過 用PostMessage的好處是, 只要有Handle就可以丟, 所以可以丟到任何一個Vcl
或是Windows裡面的任何一個AP裡, 前提是你知道它的Handle.
而且只要作一次動作即可, 不會有任何的問題
|
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
引言: 可以試試丟Message的方式 PostMessage(Memo1->Handle, WM_KEYDOWN, VK_TAB, 1); 也可以用keybd_event, 但是用這個方法正常的作法要丟keydown和keyup 也就是摸擬按鍵的行為要全部作完 <--- 沒作好會不會怎麼, 我是沒試過 用PostMessage的好處是, 只要有Handle就可以丟, 所以可以丟到任何一個Vcl 或是Windows裡面的任何一個AP裡, 前提是你知道它的Handle. 而且只要作一次動作即可, 不會有任何的問題lcsboy 大大, 在 M$DN 中有關 keybd_event 的敍述如下, keybd_event The keybd_event function synthesizes a keystroke. The system can use such a synthesized keystroke to generate a WM_KEYUP or WM_KEYDOWN message. The keyboard driver's interrupt handler calls the keybd_event function. 所以小弟覺得您所擔心的問題在 keybd_event 中較不會發生, 反倒是 SendMessage 的作法最好是先 send keydown 再 send keyup, 才算完成整個動作, 因為你不能保證程式是寫在 keydown, keyup, 或是 keypress 中, 所以會比較麻煩一點. 當然 keybd_event 比較不好的地方在於它的 scope 是整個系統, 無法針對特定視窗發送, 這是 keybd_event 強大的地方, 卻也是它的缺點. 若有觀念錯誤之處, 請您再指點. 謝謝. Jesse Chan
------
Jesse Chan |
lcsboy
版主 發表:87 回覆:622 積分:394 註冊:2002-06-18 發送簡訊給我 |
|
BGman
初階會員 發表:28 回覆:85 積分:42 註冊:2003-01-10 發送簡訊給我 |
感謝兩位高手的指導!
我閱讀了Help 之後,了解這個API是如何將訊息傳送至System Message Queue
但是對於 dwFlags 這個參數還有些疑問...
VOID keybd_event( BYTE bVk, // virtual-key code BYTE bScan, // hardware scan code DWORD dwFlags, // flags specifying various function options DWORD dwExtraInfo // additional data associated with keystroke );用了這個 KEYEVENTF_EXTENDEDKEY 常數之後, 會在鍵盤掃描碼前置位元組加上 0xE0, 請問有什麼應用時機? |
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |