Системы-клавиш большой ярлык(для Windows/Qт): предотвратить окно блокировки?
Я пытаюсь понять, как я могу использовать общесистемную горячую клавишу в моем приложении Qt. Для проверки сообщений с помощью GetMessage
Вам понадобится цикл while()
. Это приводит к тому, что окно блокируется и отключается, однако функции по-прежнему обрабатываются для каждой горячей клавиши.
Как я могу запустить цикл while одновременно таким образом, чтобы мой 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();
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();
}
1 ответ:
Решено! Спасибо Терентий .
Короче говоря, я импортирую сообщение в свой собственный поток, разрешив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; }