如何模仿普通鼠标

来源:互联网 发布:python json 增加元素 编辑:程序博客网 时间:2024/04/28 01:17

 

今天在微软社区碰到一个朋友,他现在在做一个三维鼠标的移动程序,功能就是移动这个三维鼠标的效果要跟移动普通鼠标一样。这个三维鼠标采用串口通讯的方式对x坐标和y坐标进行实时监控。现在的问题是如何模拟这个效果呢?比如很慢地移动普通鼠标一段距离,光标在屏幕上移动很短距离;但是很快地移动相同的距离,光标却能在屏幕上移动很长距离。但是他没有思路,我在社区上回贴给出了解答(http://forums.microsoft.com/china/ShowPost.aspx?PostID=2554552&SiteID=15&mode=1),顺便在这里也贴一下:

  

这个问题实际上是两个问题的叠加:

1)如何得到鼠标的实际移动信息?

2)如何将得到的移动信息传给应用程序?

3)如何让Windows系统反馈移动信息

 

对于问题1),你需要写一个Mouse Upper Filter Driver。重点是为主功能码IRP_MJ_INTERNAL_DEVICE_CONTROL书写相应的Handler,当前的IRP的成员Parameters.DeviceIoControl.Type3InputBuffer 中存放的是ClassDeviceObject和ClassService。后者是一个可以定制的回调函数指针。对应的回调函数的第2个参数指向第一个鼠标数据包,第3个参数指向最后一个鼠标数据包,最后一个参数表示鼠标数据包的数目。鼠标数据包其实是一个MOUSE_INPUT_DATA数据结构,其中的成员LastX和LastY分别表示X坐标和Y坐标。

 

对于问题2),你可以在应用程序中调用CreateFile()来打开驱动,然后调用DeviceIoControl()来与驱动通信,得到上述驱动捕获的鼠标数据。

 

对于问题3),你可以调用SDK函数SendInput()

UINT SendInput(      

    UINT nInputs,    LPINPUT pInputs,    int cbSize);
第2个参数指向INPUT数据结构,其中的成员mi对应鼠标数据,实际上是MOUSEINPUT数据结构。
原创粉丝点击