远程控制关键技术:屏幕控制之一(模拟鼠标)

远程控制关键技术:屏幕控制之一(模拟鼠标)

远程控制关键技术:屏幕控制之一(模拟鼠标)

在远程控制软件的编写中,屏幕控制最重要的部分就是模拟鼠标和模拟键盘操作了,看完这两篇文章,估计大家都很容易明白编写屏幕控制的原理,它的一般流程如下:

一、捕获被控机屏幕 => 发送到控制机。

二、捕获控制机鼠标坐标和操作(映射OnMouseUp,OnMouseDown等) => 发送到被控制机,并模拟鼠标执行。

三、捕获控制机键盘操作(pretranslatemessage中拦截) => 发送到被控制机,模拟键盘执行。

在这篇文章中我们主要来说下模拟鼠标操作所用到的函数,以及范例:

先看一下效果图:

远程控制模拟鼠标操作
远程控制模拟鼠标操作

具体可以操作演示一下,具体代码见下面。

关键函数:mouse_event();

函数原型:mouse_event(DWORD dwFlag,DWORD dx, DWORD dy, DWORD dwData, ULONG_PTR dwExtraInfo );

简单用法:

dwFlags:标志位集,指定点击按钮和鼠标动作的多种情况。此参数里的各位可以是下列值的任何合理组合:
MOUSEEVENTF_ABSOLUTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。此标志可被设置,也可不设置,不管鼠标的类型或与系统相连的类似于鼠标的设备的类型如何。要得到关于相对鼠标动作的信息,参见下面备注部分。
  • MOUSEEVENTF_MOVE:表明发生移动。
  • MOUSEEVENTF_LEFTDOWN:表明接按下鼠标左键。
  • MOUSEEVENTF_LEFTUP:表明松开鼠标左键。
  • MOUSEEVENTF_RIGHTDOWN:表明按下鼠标右键。
  • MOUSEEVENTF_RIGHTUP:表明松开鼠标右键。
  • MOUSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。
  • MOUSEEVENTF_MIDDLEUP:表明松开鼠标中键。
  • MOUSEEVENTF_WHEEL:在Windows NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。
更加详细用法:mouse_event百度百科
示例代码:[cpp]void CmouseDlg::OnBnClickedMove()
{
SetCursorPos(50,130);int i,x = 5,y = 5;

for (i = 0;i < 60; i++)
{
mouse_event(MOUSEEVENTF_MOVE,x,y,0,0);

//每隔一秒钟移动一次
Sleep(10);
}
}
void CmouseDlg::OnBnClickedLeft()
{
//把鼠标移动到坐标为50,130的位置
SetCursorPos(50,130);
//按下鼠标,并释放
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
void CmouseDlg::OnBnClickedDoubleleft()
{
SetCursorPos(50,130);
//鼠标双击由两次按下与释放来模拟
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);
}
void CmouseDlg::OnBnClickedRight()
{
SetCursorPos(300,300);
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
}

[/cpp]

完整代码下载:百度网盘(失效请联系邮箱索取:10814750$qq.com谢谢!)

下篇:远程控制关键技术:屏幕控制之二(模拟键盘)

One Reply to “远程控制关键技术:屏幕控制之一(模拟鼠标)”