2013-11-22 64 views
2

我試圖找到一種方法,我可以在我的Qt應用程序中使用全系統熱鍵。要檢查GetMessage的消息,您需要一個while()循環。這會導致窗口鎖定並被禁用,但是仍然會爲每個熱鍵處理功能。系統熱鍵快捷鍵(Windows/Qt):防止窗口鎖定?

如何以同時運行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

解決了!謝謝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; 
} 
+0

甜,非常感謝這篇文章。我第一次使用qt和windows應用程序,所有這一切都是一個很好的時間。 – dtc