荣小菜补钙记第60期_LabVIEW之调用user32实现键鼠控制
同步更新于 WeChat:荣小菜在补钙
大家好,我是荣小菜,本期主要讲解调用user32.dll实现键鼠的控制,目前LabVIEW实现键鼠控制方法有不少,但网上的资料比较零散,尝试简单归纳总结一下。
mouse_event函数
该函数用于鼠标控制,其定义如下:
mouse_event(int32_t
dwFlags, int32_t dx, int32_t dy, int32_t dwData, int32_t dwExtraInfo);
该函数的参数网上资料很多,此处不再详细讲解。
需要提一下的是该函数响应的事件及对应dwFlags值,下图中给出了对应关系。
!
我们可以将码值相加后传递来实现多个事件触发,不过需要注意的是,鼠标事件相应优先级别由高到低为:移动 左按下 左释放 右按下 右释放。
下图为LabVIEW实现代码,该代码是网上大神提供的比较有借鉴价值的一种。

keybd_event函数
该函数用于键盘控制,其定义如下:
Function
prototype:
VOID
keybd_event(
BYTE bVk, //virtual key code
BYTE bScan, //The key of the hardware scan code
DWORD
dwFlags, //A flag bit set for all
aspects of a function operation
DWORD
dwExtralnfo //Additional 32 bit values
associated with the key
);
bVK是虚拟键码,bScan是扫描代码,扫描代码主要用于标识按下了哪个键而无需考虑当前键盘布局,一般在桌面应用程序层级我们仅使用虚假键码即可。DwFlags为0表键按下,为2表键抬起。
实现代码如下:

Demo
最后写一个Demo进行简单演示,主要功能如下:(点击运行后将自动执行以下步骤)
0:鼠标移动至左上角目标区域,右键单击打开菜单栏
1:按下O键,打开目标
2:移动鼠标位置至文档区域,向下滑动滚轮
3:单击选择一行
4:按下shift切换至英文,输入1234AbCddFFfHo
5:按下ctrl+s保存

当然,除了这两种函数,我们也可以使用Sendinput函数,该函数集成了键鼠的全部控制,而且也是官方推荐的方式,不过该函数较为复杂,使用时麻烦一些,以后有机会我们再继续学习。
补充
在Demo我们可以选择两种方式触发鼠标移动,下面讲解下稍微复杂的一种:
使用mouse_event函数来触发鼠标移动,如果不启用绝对坐标,则dxdy表示相对当前鼠标坐标移动多少,而想要直接移动到屏幕某一位置,需要启动绝对坐标。此时dwFlags0x8001,相当于0x8000+0x1,前者为启动绝对坐标,后者为鼠标移动。
另外,启动绝对坐标系后显示屏左上角dxdy为(0,0)
右下角dxdy为(65536,65536),想要移动至特定坐标,需要通过获取显示屏长宽信息后再进行换算。

本期就到此结束啦,测试Demo已上传,并包含虚拟键码和扫描代码介绍,感兴趣的同学可以看看,也期望各位大神能帮忙前来指教,进一步分享更多更有趣的程序。
*附件:Demo.rar
分享开源免费,共同学习进步^_^