加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

远程控制篇:用Delphi模拟键盘输入/鼠标点击

发布时间:2020-12-15 09:56:08 所属栏目:大数据 来源:网络整理
导读:模拟键盘我们用Keybd_event这个api函数,模拟鼠标按键用mouse_event函数. Keybd_event函数能触发一个按键事件,也就是会产生一个WM_KEYDOWN或WM_KEYUP消息,一般用这两个消息来模拟一 次按键(按键的过程是:按下,然后弹起),但是没有直接用这个函数方便。 Keyb

模拟键盘我们用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);

keybd_event($49,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);

mouse_event(MOUSEEVENTF_LEFTUP,0);

mouse_event(MOUSEEVENTF_LEFTDOWN,0); ...

上面的代码表示鼠标的双击,若要表示单击,用两个mouse_event即可(一次放下,一次松开)。  

注意
不管是模拟键盘还是鼠标事件,都要注意还原,即按完键要松开,一个keydown对应一个keyup;鼠标单击 完也要松开, 不然可能影响程序的功能。

?

例子1:模拟按下‘A‘键
   keybd_event(65,0);
   keybd_event(65,0);

  例子2:模拟按下‘ALT+F4‘键
   keybd_event(18,0);
   keybd_event(115,0);
   keybd_event(18,0);

sendmessage模拟鼠标点击==============================================================

?

?

模拟鼠标点击?
SendMessage(h,WM_LBUTTONDown,1,1);?
SendMessage(h,WM_LBUTTONUP,1);?
点击是一次按下和一次抬起组成的!?
对鼠标的消息参数为:?
SendMessage(h,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);
Mouse_Event(MOUSEEVENTF_LEFTUP,0);
end;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton;?
Shift: TShiftState; X,Y: Integer);?
begin?
PostMessage(Button2.Handle,WM_LBUTTONDOWN,(y shl 16)+x);?
end;?

procedure TForm1.Button2MouseUp(Sender: TObject; Button: TMouseButton;?
Shift: TShiftState; X,(y shl 16)+x);?
end;

?

?

◇[DELPHI]发送虚拟键值ctrl V
procedure sendpaste;
begin
keybd_event(VK_Control,MapVirtualKey(VK_Control,0),0);
keybd_event(ord(‘V‘),MapVirtualKey(ord(‘V‘),0);
keybd_event(VK_Control,0);
end;

时间:2018-06-16 23:21:31 阅读(25)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读