我想写一个全局的键盘钩不允许任务切换。当我GOOGLE了,我发现了很多代码在c#,cpp(和delphi),但我需要一些关于钩子的基本概念(将是最好的,如果例子是在C )。所以,请好好build议资源,链接可以帮助我从C的angular度来理解事物。
PS:我发现了一个很好的工作示例 (适用于winXP和旧版本),但是当我尝试编译代码时,它给了我:
我试着search所有头文件中的“IDC_”常量(MinGW gcc安装和开发者提供的缺省值),但没有运气…如果有人能够编译代码并使其运行,请帮助我。我没有在这里上传源代码,因为有一些头文件的依赖关系,在这种情况下,我不得不在这里发布所有的代码。
winXP是目标环境,但如果我得到它也运行Win7会更好。
假设你在Windows上,并且想要捕获全局按键,我将在这里假设。 一种方法是使用LowLevelHooks。 看下面的例子:
在你的代码中定义这个回调函数:
//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 = GetmoduleeHandle(NULL); //Set a global Windows Hook to capture keystrokes using the function declared above HHOOK test1 = SetWindowsHookEx( WH_KEYBOARD_LL, LowLevelKeyboardProc, instance,0);
有关钩子的更多一般信息可以在这里找到。 您也可以按照与SetWindowsHooksEX文档中给出的指导相同的方式捕获其他全局事件。