0
如下面的代碼片段所示,每次輕按一個按鍵時,函數LowLevelKeyboardProc被調用。但問題是在按下按鍵時以及在釋放按鍵時都會調用它。這意味着,每一次敲擊都會調用該功能兩次。但是,當按鍵被調用時,我希望該功能僅被調用一次而不是當鑰匙被釋放時。只有在按下按鍵時纔會調用功能
即使我可以過濾功能LowLevelKeyboardProc內的按鍵的按下和釋放,它會沒事的。有什麼辦法可以做到這一點嗎?
static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
// call the function only if the key is pressed,else (i.e key released) do nothing
}
BOOL WINAPI installHook(HINSTANCE hinstDLL, DWORD fwdReason, LPVOID lpvReserved){
handleKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hinstDLL, 0);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdReason, LPVOID lpvReserved) { // ENTRY POINT
if(hookThreadHandle==NULL) {
LPTHREAD_START_ROUTINE lpStartAddress = &installHook;
hookThreadHandle = CreateThread(NULL, 0, lpStartAddress, NULL, 0, &hookThreadId);
}
return TRUE;
}
我WINAPI是有點生疏,但我相信,CallNextHookEx方法也應該是在他不處理該消息的情況下調用。 –
@Benjamin Lindley - 是的,但程序員可能想隱藏一些鍵盤消息,在這種情況下CallNextHookEx不會被調用。 –
來自MSDN:如果nCode小於零,則掛鉤過程必須將消息傳遞給CallNextHookEx函數而無需進一步處理,並且應返回由CallNextHookEx返回的值。所以,如果nCode <0,只需返回CallNextHookEx - 這是強制性的。 –