在windows大行其道的今天,windows介面程式受到廣大使用者的歡迎。對這些程式的操作不外乎兩種,鍵盤輸入控制和滑鼠輸入控制。有時,對於繁雜 的,或重複性的操作,我們能否通過編制程式來代替手工輸入,而用程式來模擬鍵盤及滑鼠的輸入呢?答案是肯定的。這主要是通過兩個api函式來實現的。
下面以delphi為例來介紹一下如何實現這兩個功能。模擬鍵盤我們用keybd_event這個api函式,模擬滑鼠按鍵用mouse_event函式。大家不用擔心,在delphi裡呼叫api函式是很方便的事。
先介紹一下keybd_event函式。keybd_event能觸發乙個按鍵事件,也 就是說回產生乙個wm_keydown或wm_keyup訊息。當然也可以用產生這兩個訊息來模擬按鍵,但是沒有直接用這個函式方便。 keybd_event共有四個引數,第乙個為按鍵的虛擬鍵值,如回車鍵為vk_return, tab鍵為vk_tab。第二個引數為掃瞄碼,一般不用 設定,用0代替就行。第三個引數為選項標誌,如果為keydown則置0即可,如果為keyup則設成「keyeventf_keyup」,第四個引數一 般也是置0即可。用如下**即可實現模擬按下i鍵,其中的49表
示i鍵的
虛擬鍵值
:key
bdev
ent(
49,0,0,0);
keybd_event($49,0,keyeventf_keyup,0); …
mouse_event最好配合setcursorpos(x,y)函式一起使用,與 keybd_event類似,mouse_event有五個引數,第乙個為選項標誌,為mouseeventf_leftdown時表示左鍵按下,為 mouseeventf_leftup表示左鍵鬆開,向系統傳送相應訊息。第二三個引數分別表示x,y相對位置,一般可設為0,0,第四五個引數並不重 要,一般也可設為0,0。若要得到keybd_event和mouse_event函式的更詳細的用法,可以查閱msdn或delphi幫助。下面是關於 mouse_event的示例**:
setcursorpos(20,132);
mouse_event(mouseeventf_leftdown,0,0,0,0);
mouse_event(mouseeventf_leftup,0,0,0,0);
mouse_event(mouseeventf_leftdown,0,0,0,0);
mouse_event(mouseeventf_leftup,0,0,0,0); …
上面的**表示滑鼠的雙擊,若要表示單擊,用兩個mouse_event即可(一次放下,一次鬆開)。
注意,不管是模擬鍵盤還是滑鼠事件,都要注意還原,即按完鍵要鬆開,乙個keydown對應乙個keyup;滑鼠單擊 完也要鬆開, 不然可能影響程式的功能。
**:
鍵盤鍵值表
值 描述 0x1 滑鼠左鍵 0x2 滑鼠右鍵 0x3 cancel 鍵 0x4 滑鼠中鍵 0x8 backspace 鍵 0x9 tab 鍵 0xc clear 鍵 0xd enter 鍵 0x10 shift 鍵 0x11 ctrl 鍵 0x12 menu 鍵 0x13 pause 鍵 0x14 ...
鍵盤鍵值表
值 描述 0x1 滑鼠左鍵 0x2 滑鼠右鍵 0x3 cancel 鍵 0x4 滑鼠中鍵 0x8 backspace 鍵 0x9 tab 鍵 0xc clear 鍵 0xd enter 鍵 0x10 shift 鍵 0x11 ctrl 鍵 0x12 menu 鍵 0x13 pause 鍵 0x14 ...
虛擬鍵值表
虛擬鍵 十六進製制值 十進位制值 相應鍵盤或滑鼠鍵 vk lbutton011 滑鼠左鍵 vk rbutton022 滑鼠右鍵 vk cancel033 ctrl break鍵 vk mbutton044 滑鼠中鍵 vk back088 backspace鍵 vk tab099 tab鍵 vk cl...