c++ - 系统范围的热键快捷方式(Windows/Qt) : Prevent window lock?

标签 c++ qt concurrency hotkeys stdafx.h

我想找到一种方法可以在我的 Qt 应用程序中使用系统范围的热键。要使用 GetMessage 检查消息,您需要一个 while() 循环。这会导致窗口锁定并被禁用,但仍会为每个热键处理功能。

如何以允许我的 ui 响应的方式同时运行 while 循环?


示例

#define MOD_NOREPEAT    0x4000
#define MOD_ALT         0x0001

#include "stdafx.h"
#include <QDebug>
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    RegisterHotKey(NULL,1,MOD_ALT | MOD_NOREPEAT,0x42);
    RegisterHotKey(NULL,2,MOD_ALT | MOD_NOREPEAT,0x44);

    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    MSG msg;

    while(GetMessage(&msg,NULL,0,0)){
        if (msg.message == WM_HOTKEY){
            if (msg.wParam == 1) qDebug() << "Hot Key activated : ALT + B";
            if (msg.wParam == 2) qDebug() << "Hot Key activated : ALT + D";
        }
    }
    return a.exec();
}

最佳答案

解决了!谢谢terenty .

简而言之,在允许 ui 完成加载后,我将消息导入到我自己的线程中。

#define MOD_NOREPEAT    0x4000
#define MOD_ALT         0x0001

#include "stdafx.h"
#include <QDebug>
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    RegisterHotKey(NULL,1,MOD_ALT | MOD_NOREPEAT,0x42);
    RegisterHotKey(NULL,2,MOD_ALT | MOD_NOREPEAT,0x44);

    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    QApplication::processEvents();

    MSG msg;
    while(GetMessage(&msg,NULL,0,0)){
        TranslateMessage(&msg);
        DispatchMessage(&msg);
        if (msg.message == WM_HOTKEY){
            if (msg.wParam == 1) qDebug() << "Hot Key activated : ALT + B";
            if (msg.wParam == 2) qDebug() << "Hot Key activated : ALT + D";
        }
    }
    return msg.wParam;
}

关于c++ - 系统范围的热键快捷方式(Windows/Qt) : Prevent window lock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20153848/

相关文章:

java - 我应该从多个线程访问(而不是更改)一个对象吗?

swift - 为什么带同步的并发队列表现得像串行队列?

c++ - MONGODB C++ DRIVER mongocxx 和 legacy 的区别

C++ Win32 窗口背景不重绘

c++ - (如何)当 std::future 准备好时,我可以在 boost::asio::io_service 上获得回调吗?

c++ - 函数定义中的成对变量

c++ - QT Creator 和 OpenCV455 : 'arm_neon.h' file not found

c++ - Qt - 与 BLE 设备断开连接

c++ - 从渐变中获取中间色

java - 为什么Executors创建Executor使用LinkedBlockingQueue而不是ConcurrentLinkedQueue