Qt如何实现模拟键盘按键?

    前言

    题目更准确的说法应该是c++如何实现模拟键盘按键?只不过习惯了Qt的环境开发而已。

    现在的需求是需要通过软件来模拟按下热键以触发某些功能。比如说某截图软件的截图快捷键是ctrl + alt + A,我需要通软件来模拟按下这个组合键,以实现截图功能。

    通常我们都是处理接收到的事件,例如我们可以获取键盘按下的事件,然后做一些响应,这种场景使用Qt的事件系统就可以实现了。但是现在我们相当于要发送事件,而且事件的接收者是别的程序,这时就需要借助操作系统的力量了。调用windows的api  keybd_event。

    

    关于keybd_event函数

    keybd_event没有返回值,有四个参数,我们这里只要用到其中两个参数。

    image.png

    第一个参数是按键码(要操作哪个键),第三个参数操作标志(是按下还是弹起)。第二个参数(硬件扫描码)和第四个参数(操作的键的附加信息)有兴趣的可以研究一下。

    

    模拟ctrl + alt + A

    直接上代码:

    image.png

    代码一目了然,关键在于第一个参数和第三个参数怎么填(其他两个参数填0)。先说第三个参数0表示按下,2表示弹起。奇怪的是可以找到表示弹起的宏KEYEVENTF_KEYUP,找不到表示按下的宏:

image.png

    关于第一个参数键码,ctrl键的宏定义VK_CONTROL,shift键的宏定义为VK_SHIFT,F1键的宏位VK_F1.........  数字键和ASCII的数字值是一样的,字母键的值和ASCII码的大写字母的值是一样的。

  image.png

   以上这些按键的键码都很好记,但是就是没找到alt的定义,经过测试它的值为VK_MENU。


    最后需要注意,既然是系统api,自然需要包含系统的头文件:

    image.png






演示站
上一篇:学习笔记之二进制十进制和十六进制
下一篇:Qt如何模拟鼠标点击?

发表评论