2011-05-15 39 views
1

我有非常著名的WinAPI的功能:使用NUM/CAPS/SCROLL LOCK爲RegisterHotKey改性劑WinAPI的

BOOL WINAPI RegisterHotKey(
    __in_opt HWND hWnd, 
    __in  int id, 
    __in  UINT fsModifiers, 
    __in  UINT vk 
); 

我看到,我理應只能用MOD_ALTMOD_CONTROLMOD_SHIFTMOD_WIN鍵,以及MOD_NOREPEAT

這樣我就可以使用以下方法來創建全系統熱鍵,也就是說,一個關鍵的Shift+A組合:

RegisterHotKey(NULL,1,MOD_SHIFT,0x41); 

現在重要的問題:

如何使用NUM LOCK/SCROLL狀態LOCK/CAPS LOCK(就像MOD_SHIFT和其他的那樣)作爲系統範圍的熱鍵的修飾符,使得​​當這些「LOCK」鍵中的任何一個被鍵入時,鍵組合的註冊鍵作爲熱鍵打開時,並且當「LOCK」鍵中的任何一個關閉時,它也表現爲正常的非捕捉鍵?

我認爲一個計時器和監視如GetKeyState(VK_NUMLOCK)&0xFFFF註冊/取消註冊熱鍵將是一個解決方案太渺小,可能會減慢或干擾系統的性能,這聽起來像一個不完整的方式進行,因爲它與系統範圍的關鍵行爲有關。

有什麼更好的方法呢?

回答

1

根據情況,我可能會檢查事件代碼開頭的「LOCK」鍵的狀態。

否則,如果你真的想要你可以使用SetWindowsHookEx創建一個鍵盤掛鉤來做你的監測。

+0

'SwtWindowsHookEx'函數看起來很有趣。然而,我認爲僅僅檢查LED-LOCK鍵的狀態是不夠的,因爲一旦一個鍵被註冊爲熱鍵,它的正常行爲就不會返回到全系統**,除非它未被註冊爲熱鍵。我會再仔細檢查一下它的細節,看看還能做些什麼。 – 2011-05-17 06:36:09