2009-11-28 44 views

回答

4

您需要設置低級鍵盤掛鉤。通過使用LowLevelKeyboardProc調用SetWindowsHookEx來完成此操作,然後觀察相應的virtual key code

有左,右移和鍵的鍵碼。

+1

在您引用的鏈接中提到了這一點,但要記住一件好事:系統會爲這些回調強制超時,因此最好不要在其中執行太多計算。 – asveikau 2009-11-28 01:16:33

+0

是的。如果你需要做長時間的工作,你應該將它排列在另一個線程中進行處理,而不是在鉤子本身中進行處理。 – 2009-11-28 01:26:25

0

我相信你也可以通過GetKeyState獲得虛擬鍵的狀態,例如,函數GetKeyState(VK_RSHIFT)。儘管使用Reed Copsey所描述的鉤子可能更適合您的目的,而不是輪詢此功能。

-1

如果你想知道的鑰匙的當前狀態,現在,你可以使用GetAsyncKeyState()VK_LSHIFTVK_RMENU分別左移右ALT參數。確保測試結果的最高有效位,因爲結果包含多於一位的信息,例如,

if(GetAsyncKeyState(VK_LSHIFT) & 0x8000) 
    ; // left shift is currently down 

如果改爲希望收到按鍵取代查詢異步的,你應該聽的WM_KEYDOWN窗口通知。把這樣的事情在你的窗口消息處理程序:

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) 
{ 
    switch(msg) 
    { 
    ... 
    case WM_KEYDOWN: 
     if(wparam == VK_LSHIFT) 
      ; // left shift was pressed 
     // etc. 
     break; 
    } 
} 

你還必須處理WM_KEYUP消息知道鍵被釋放時。

+2

不,VK_SHIFT而不是VK_LSHIFT將作爲WM_KEYDOWN中的wparam給出,請參閱http://msdn.microsoft.com/en-us/library/windows/desktop/ms646280%28v=vs.85%29.aspx我是我現在正在尋找一種解決方法。 – cib 2013-04-12 08:09:25

0

而不是WM_KEYDOWN和WM_KEYUP,使用WM_SYSKEYDOWN和WM_SYSKEYUP;那麼你可以檢查它是否是VK_LSHIFT或VK_MENU等,它會捕獲這些事件。

+0

如果用戶在按住[Alt]鍵的同時鍵入一個鍵**,則發送WM_SYSKEY [DOWN | UP]。這不是OP要求的。他們希望在按下右側的[Alt]鍵時得到通知。低級別鍵盤鉤子中的「WM_KEYDOWN」是正確的解決方案。 – IInspectable 2017-03-05 23:43:19

相關問題