標籤:
類比鍵盤我們用Keybd_event這個api函數,類比滑鼠按鍵用mouse_event函數.
Keybd_event函數能觸發一個按鍵事件,也就是會產生一個WM_KEYDOWN或WM_KEYUP訊息,一般用這兩個訊息來類比一
次按鍵(按鍵的過程是:按下,然後彈起),但是沒有直接用這個函數方便。
Keybd_event共有四個參數:
第一個為按鍵的虛擬索引值,如斷行符號鍵為vk_return, tab鍵為vk_tab;
第二個參數為掃描碼,一般不用設定,用0代替就行;
第三個參數為選項標誌,如果為keydown則置0即可,如果為keyup則設成“KEYEVENTF_KEYUP”;
第四個參數一般也是置0即可。
例如用以下代碼即可實現類比按下i鍵,其中的$49表示i鍵的虛擬索引值:
keybd_event($49,0,0,0);
keybd_event($49,0,KEYEVENTF_KEYUP,0);
mouse_event最好配合setcursorpos(x,y)函數一起使用,先定位滑鼠,再產生滑鼠事件.
mouse_event有五個參數:
第一個為選項標誌,為MOUSEEVENTF_LEFTDOWN時表示左鍵按下,為MOUSEEVENTF_LEFTUP表示左鍵鬆開,向系統發送相應訊息;
第二三個參數分別表示x,y相對位置,一般可設為0,0;
第四五個參數並不重要,一般也可設為0,0。
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;按一下滑鼠 完也要鬆開, 不然可能影響程式的功能。
例子1:類比按下‘A‘鍵
keybd_event(65,0,0,0);
keybd_event(65,0,KEYEVENTF_KEYUP,0);
例子2:類比按下‘ALT+F4‘鍵
keybd_event(18,0,0,0);
keybd_event(115,0,0,0);
keybd_event(115,0,KEYEVENTF_KEYUP,0);
keybd_event(18,0,KEYEVENTF_KEYUP,0);
sendmessage類比滑鼠點擊==============================================================
2008-03-15 10:06
類比滑鼠點擊 SendMessage(h, WM_LBUTTONDown, 1, 1); SendMessage(h, WM_LBUTTONUP, 1, 1); 點擊是一次按下和一次抬起組成的! 對滑鼠的訊息參數為: SendMessage(h, WM_LBUTTONDown, X座標, Y座標); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// var x,y:integer; begin x:=form1.Left+webbrowser1.Left+570; y:=form1.Top+webbrowser1.Top+210; SetCursorPos(x,y); Mouse_Event(MOUSEEVENTF_LEFTDOWN,X,Y,0,0); Mouse_Event(MOUSEEVENTF_LEFTUP,X,Y,0,0); end; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin PostMessage(Button2.Handle,WM_LBUTTONDOWN,0,(y shl 16)+x); end;
procedure TForm1.Button2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin PostMessage(Button2.Handle,WM_LBUTTONUP,0,(y shl 16)+x); end; ◇[DELPHI]發送虛擬索引值ctrl V procedure sendpaste; begin keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0); keybd_event(ord(‘V‘), MapVirtualKey(ord(‘V‘), 0), 0, 0); keybd_event(ord(‘V‘), MapVirtualKey(ord(‘V‘), 0), KEYEVENTF_KEYUP, 0); keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0); end; |
遠端控制篇:用Delphi類比鍵盤輸入/滑鼠點擊