遠端控制篇:用Delphi類比鍵盤輸入/滑鼠點擊

來源:互聯網
上載者:User

標籤:

類比鍵盤我們用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類比鍵盤輸入/滑鼠點擊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.