Qt 将给定的键发送到活动的应用程序
Posted
技术标签:
【中文标题】Qt 将给定的键发送到活动的应用程序【英文标题】:Qt Send the given keys to the active application 【发布时间】:2018-01-21 19:32:06 【问题描述】:我一直在寻找任何具有将密钥发送到 MS Windows 桌面操作系统活动应用程序的方法的 Qt 类,但没有成功,我想知道是否有直接的解决方案。我想要的是类似于 VS Clr/C++ 类 System::Windows::Forms::SendKeys
的东西,它的方法是 SendWait(String^)
。
【问题讨论】:
Qt 没有将击键/鼠标动作发送到其他应用程序的类。您需要回退到依赖于平台的 API。请编辑您的问题并包含您所针对的平台,以便这里的人可以帮助您... @Mike,没问题,虽然System::Windows
表明了这一点
【参考方案1】:
在windows下使用user32
库中的SendInput
和Qt是直接和简单的,像这样:
.pro
win32: LIBS += -lUser32
一个函数可以用任意键重传:
.cpp
#include "Windows.h"
// Because the SendInput function is only supported in
// Windows 2000 and later, WINVER needs to be set as
// follows so that SendInput gets defined when windows.h
// is included below.
#define WINVER 0x0500
void sendKeys::sendKeysqt(QString bCodeSequence)
// This structure will be used to create the keyboard
// input event.
int arraySizeqtt = bCodeSequence.length();
INPUT ip;
// Pause for 5 seconds.
Sleep(2000);
for (int i=0; i < arraySizeqtt; i++)
// Set up a generic keyboard event.
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0; // hardware scan code for key
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
// Press the key
byte x = VkKeyScan(bCodeSequence.at(i).unicode());
ip.ki.wVk = x; // virtual-key code for the "a" key
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
// Release the key
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));
【讨论】:
以上是关于Qt 将给定的键发送到活动的应用程序的主要内容,如果未能解决你的问题,请参考以下文章
System.Collections.Generic.KeyNotFoundException:从 PUSHSHARP 发送推送通知时,字典中不存在给定的键