ubuntu下qt模拟键盘按键按下_Qt如何实现模拟键盘按键?

本文介绍了在Ubuntu操作系统中,使用Qt库如何模拟键盘按键的实现方法。通过调用系统API keybd_event来发送按键事件,特别是针对Ctrl、Alt等特殊键的操作,并提供了示例代码来模拟Ctrl + Alt + A的组合键操作。在代码中,关键在于正确设置按键码和操作标志,如VK_CONTROL、VK_SHIFT、VK_MENU分别对应Ctrl、Shift和Alt键。
摘要由CSDN通过智能技术生成

前言

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

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

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

关于keybd_event函数

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

d80734defd76dc9d21214d588712ce7f.png

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

模拟ctrl + alt + A

直接上代码:

d553345690d5d4635504335ef02f2b03.png

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

8a5db58e26c58855e3d20444438d30d5.png

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

e5f0da8c6dfd716b28378ed1a307f2c0.png

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

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

c0756c19110b79a1d90469711c6acda5.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值