Сочетание горячих клавиш для всей системы (Windows / Qt): Предотвратить блокировку окна?

Я пытаюсь найти способ использовать системную горячую клавишу в своем приложении 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();
}

2

Решение

Решено! Спасибо тебе Терентий.

Короче говоря, я импортирую сообщение в свой собственный поток после разрешения 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;
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]