2009-11-30 146 views
15

我已經能夠設置本地熱鍵這樣WIN32 API的全局熱鍵?

RegisterHotKey(hwndDlg, 100, MOD_ALT | MOD_CONTROL, 'S'); 

如何設置熱鍵是全球性的?即使當我的窗戶隱藏時,我也希望它在那裏。

+2

我一直在寫Windows應用程序近20年,我不知道這個API調用存在 - 所以噸hank和+1。 :) – Rob 2009-11-30 21:46:57

回答

11

我解決了它自己,但感謝您的回覆 這裏就是錯了...

ShowWindow(hwndDlg, SW_HIDE); 
RegisterHotKey(hwndDlg, 100, MOD_ALT | MOD_CONTROL, 'S'); 

如果您先註冊熱鍵則隱藏窗口...它忽略了某些原因熱鍵..哦,恩..它的工作現在:)

+1

很酷。所以它保證是全球性的? – Viet 2011-01-18 08:35:10

+0

是的,我認爲這樣:) – Mars 2011-01-20 15:42:06

5

不管你的窗口是否可見,都無關緊要。你不應該使用你打算破壞的hWnd(就像一個對話框)。如果您沒有其他合適的窗口,請創建一個單獨的(不可見的)窗口。

+2

我不摧毀它 我只是這樣隱藏它 ShowWindow(hwndDlg,SW_HIDE); – Mars 2009-11-30 16:29:09

2

首先定義一個或多個常數爲你的熱鍵

#define HOTKEY1 1000 
#define HOTKEY2 1002 

然後你註冊這些熱鍵

RegisterHotKey(NULL, HOTKEY1, MOD_ALT + MOD_SHIFT, 0x53); // ALT+SHIFT+s 
RegisterHotKey(NULL, HOTKEY2, MOD_ALT + MOD_SHIFT, 0x51); // ALT+SHIFT+q 
中的重頭戲

最後看你監視這些熱鍵,並作出迴應:

  if (msg.message == HOTKEY1) 
     { 
      switch (LOWORD(msg.wParam)) 
      { 
      case HOTKEY1: 
       // do such and such 
       break; 
      case HOTKEY2: 
       // do such and such 
       break 
      } 
     }