c语言中的全局键盘挂钩
我想写一个全局键盘钩子来禁止任务切换。当我在谷歌上搜索时,我在c#、cpp(和delphi)中发现了大量代码,但我需要一些关于钩子的基本概念(如果示例是c,那最好)。因此,请推荐一些参考资料和链接,帮助我从c的角度理解这个问题 PS:我发现了一个不错的(适用于winXP和旧版本),但当我尝试编译代码时,它给了我: 我试着搜索所有标题中的“IDC_”常量(MinGW gcc安装附带的默认标题和开发人员提供的标题),但是没有运气…如果有人可以编译代码并使其运行,请帮助我。我没有上传源代码本身在这里,因为有一些头文件的依赖关系,在这种情况下,我将不得不张贴所有的代码在这里c语言中的全局键盘挂钩,c,windows,hook,keyboard-hook,C,Windows,Hook,Keyboard Hook,我想写一个全局键盘钩子来禁止任务切换。当我在谷歌上搜索时,我在c#、cpp(和delphi)中发现了大量代码,但我需要一些关于钩子的基本概念(如果示例是c,那最好)。因此,请推荐一些参考资料和链接,帮助我从c的角度理解这个问题 PS:我发现了一个不错的(适用于winXP和旧版本),但当我尝试编译代码时,它给了我: 我试着搜索所有标题中的“IDC_”常量(MinGW gcc安装附带的默认标题和开发人员提供的标题),但是没有运气…如果有人可以编译代码并使其运行,请帮助我。我没有上传源代码本身在这里
winXP是目标环境,但如果我让它也运行Win7,它会更好。假设您在Windows上,并且希望捕获全局击键,我将在这里冒险。一种方法是使用lowlevelhook。请看以下示例: 在代码中的某个位置定义此回调函数:
//The function that implements the key logging functionality
LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam )
{
char pressedKey;
// Declare a pointer to the KBDLLHOOKSTRUCTdsad
KBDLLHOOKSTRUCT *pKeyBoard = (KBDLLHOOKSTRUCT *)lParam;
switch( wParam )
{
case WM_KEYUP: // When the key has been pressed and released
{
//get the key code
pressedKey = (char)pKeyBoard->vkCode;
}
break;
default:
return CallNextHookEx( NULL, nCode, wParam, lParam );
break;
}
//do something with the pressed key here
....
//according to winapi all functions which implement a hook must return by calling next hook
return CallNextHookEx( NULL, nCode, wParam, lParam);
}
然后在主函数中的某个地方,您可以这样设置钩子:
//Retrieve the applications instance
HINSTANCE instance = GetModuleHandle(NULL);
//Set a global Windows Hook to capture keystrokes using the function declared above
HHOOK test1 = SetWindowsHookEx( WH_KEYBOARD_LL, LowLevelKeyboardProc, instance,0);
可以找到关于钩子的更多一般信息。
您还可以按照文档中给出的说明,以相同的方式捕获其他全局事件 您打算将此应用于哪个平台?WinXP?如果是这样的话,Winapi有一种实现全局键盘挂钩的方法。我忘了提到这个问题了……是的,winXP是目标环境,但如果我让它也运行Win7会更好。我明白了,一般来说,我需要看看它是否在Windows下。检查我下面的答案是否有帮助。这是一个很好的例子,“我想解X,我认为复杂的解是Y。我会问Y。”你真正应该做的可能是问X。捕捉击键不会阻止任务切换。@tenfour为什么?如果我禁用ALT和WIN键,您仍然可以切换任务吗?