系统范围的热键快捷方式(Windows/Qt):防止窗口锁定
Sytem-wide Hotkey Shortcut(Windows/Qt) : Prevent window lock?
我正试图找到一种在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;
}
相关文章:
- Qt VTK交互风格的信号到小部件
- QT在错误的班级中寻找空位
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 如何在Qt C++中更改光标
- 如何找到锁定Linux futex的C++行
- 如何在MS Visual Studio 2019中运行QT UI
- G锁定铸造到基础上会释放模拟行为
- QT通过C++添加映射QML项目
- 在Qt中将应用程序方向锁定为横向
- 系统范围的热键快捷方式(Windows/Qt):防止窗口锁定
- QT 关闭窗口 QTest 在锁定线程中
- 是否可以使您的Qt应用程序在运行时不锁定文件
- QGuiApplication在使用Qt 5.3或Qt 5.4(但不使用Qt 5.2)编译时,当手机被锁定时停止事件循环
- 像 C# 一样在 Qt 中锁定对象
- 正在释放Qt中的文件锁定
- 如何通过Qt锁定数据库中的表
- 当应用程序面朝上启动时,iOS版Qt会锁定.(qiosscreen.mm断言)
- Qt android屏幕锁定java问题
- 有什么方法可以通过Qt锁定除一个表单外的所有表单吗