我有一个dll被注入特定的过程,目的是限制某些按键被发送到上述过程..
这似乎有效,但存在一个主要缺陷..当按下我想要限制的按键时,它们仍然被传递给过程。
每当钩子返回值1时,我都会添加一行来引发一个消息框(限制键不再进一步拥有链),并且引发了消息框,甚至更奇怪,键被停止进展,但每当我删除消息框代码时,限制完全被忽略!!
有人能突出我做错了吗?或者在不太可能的情况下,这不是我自己的错误行为,而是一些我不知道的怪癖,请告诉我。
非常感谢。
这是我的钩子proc代码,我希望它是问题所在。
extern "C" __declspec(dllexport) int KeyboardHook(INT nCode, WPARAM wParam, LPARAM lParam) {
//-- Return unless valid nCode
if (nCode < 0) return CallNextHookEx(keyhook_handle, nCode, wParam, lParam);
//-- Setup some bools
BOOL alt_down = ((lParam & (1U << 29)) == 1);
BOOL key_last = ((lParam & (1U << 30)) == 0);
BOOL key_down = ((lParam & (1U << 31)) == 0);
BOOL let_pass = TRUE;
//-- Checks for keypresses
if (key_last && key_down) {
if (wParam == VK_F12) let_pass = FALSE;
if ((wParam == VK_RETURN) && alt_down) let_pass = FALSE;
}
//-- If not let_pass then return 1 to restrict key
if (!let_pass) {
//MessageBox(NULL, L"Key Stopped", L"Info:", MB_OK | MB_ICONERROR);
return 1;
}
//-- Call the next hook in the chain
return CallNextHookEx(keyhook_handle, nCode, wParam, lParam);
}