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 将给定的键发送到活动的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串从一个活动发送到另一个活动

使用 C++\Qt 从当前窗口中获取选定的文本

仅在活动运行时将意图从服务发送到活动

将意图从工作人员发送到单独应用程序中的活动

System.Collections.Generic.KeyNotFoundException:从 PUSHSHARP 发送推送通知时,字典中不存在给定的键

如何将字符串数据从活动发送到片段?