2014-11-14 57 views
1

這段代碼在Windows下爲SHIFT + F5和SHIFT + F6註冊了2個全局熱鍵,它在任何情況下都能正常工作,包括完全其他應用程序具有例如遊戲焦點。在C++中沒有修飾符的RegisterHotKey

enum{ KEY_F5 = 1, KEY_F6 = 2 }; 
RegisterHotKey(0, KEY_F5, MOD_SHIFT, VK_F5); 
RegisterHotKey(0, KEY_F6, MOD_SHIFT, VK_F6); 
MSG msg; 
while (GetMessage(&msg, 0, 0, 0)) 
{ 
    PeekMessage(&msg, NULL, 0, 0, 0); 
    switch (msg.message){ 

    case WM_HOTKEY: 
     if (msg.wParam == KEY_F5){ 
      // code 
     } 
     else if (msg.wParam == KEY_F6){ 
      // code 
     } 
    } 
} 

但是,如果我更換

RegisterHotKey(0, KEY_F5, MOD_SHIFT, VK_F5); 
RegisterHotKey(0, KEY_F6, MOD_SHIFT, VK_F6); 

通過

RegisterHotKey(0, KEY_F5, 0, VK_F5); 
RegisterHotKey(0, KEY_F6, 0, VK_F6); 

,因爲我的目標是兩人F5和F6的快捷鍵,而不必總是按SHIFT鍵,它只能如果我的程序的重點不在於其他方面。我怎樣才能達到只有F?就像TS3那樣的全球熱鍵。即使應用程序沒有焦點,它也必須工作。

+0

爲什麼你的代碼顯示你註冊一個熱鍵爲'KEY_F5',但檢查'ONE_KEYID'? – 2014-11-14 13:51:17

+1

您需要確保您的應用的卸載程序運行良好。它會得到很多用途。 – 2014-11-14 14:19:52

回答

0

嘗試使用MOD_NOREPEAT而不是MOD_SHIFT。我也沒有看到使用「PeakMessage」的必要性。由於您已致電GetMessage(),因此PeakMessage確實是多餘的。