我有非常著名的WinAPI的功能:使用NUM/CAPS/SCROLL LOCK爲RegisterHotKey改性劑WinAPI的
BOOL WINAPI RegisterHotKey(
__in_opt HWND hWnd,
__in int id,
__in UINT fsModifiers,
__in UINT vk
);
我看到,我理應只能用MOD_ALT
,MOD_CONTROL
,MOD_SHIFT
,MOD_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
註冊/取消註冊熱鍵將是一個解決方案太渺小,可能會減慢或干擾系統的性能,這聽起來像一個不完整的方式進行,因爲它與系統範圍的關鍵行爲有關。
有什麼更好的方法呢?
'SwtWindowsHookEx'函數看起來很有趣。然而,我認爲僅僅檢查LED-LOCK鍵的狀態是不夠的,因爲一旦一個鍵被註冊爲熱鍵,它的正常行爲就不會返回到全系統**,除非它未被註冊爲熱鍵。我會再仔細檢查一下它的細節,看看還能做些什麼。 – 2011-05-17 06:36:09