首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

键盘,鼠标钩子有关问题

2012-04-11 
键盘,鼠标钩子问题 - C++ Builder / Windows SDK/APIC/C++ codeHINSTANCE HinstDLL#pragma argsusedint W

键盘,鼠标钩子问题 - C++ Builder / Windows SDK/API

C/C++ code
HINSTANCE HinstDLL;#pragma argsusedint WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved){      HinstDLL =hinst;        return 1;}//---------------------------------------#pragma data_seg ("sharVar")//DLL输出的全局变量extern "C" __declspec(dllexport) HHOOK hKeyHook=NULL;extern "C" __declspec(dllexport) HHOOK hMouseHook=NULL;extern "C" __declspec(dllexport) HHOOK hMessageHook=NULL;extern "C" __declspec(dllexport) HWND parHwnd=NULL;extern "C" __declspec(dllexport) HWND decHwnd=NULL;#pragma data_seg ()void    SetHandleProc( HWND GameH );static HWND    GameHandle = NULL;MYHOOK_API void IniKeybord(){   hKeyHook = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,HinstDLL,0);}MYHOOK_API void IniMouse(){   hMouseHook = SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,HinstDLL,0);}MYHOOK_API void UnInKeybord(){     if(hKeyHook)      UnhookWindowsHookEx(hKeyHook);      hKeyHook = NULL;}MYHOOK_API void UnInMouse(){     if(hMouseHook)     UnhookWindowsHookEx(hMouseHook);     hMouseHook = NULL;}MYHOOK_API LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam){    SendMessage(parHwnd,WM_KEY_HOOK,wParam,lParam);     if(nCode == HC_ACTION)     {         if(lParam & 0x80000000)         {              char c[1];              c[0] =wParam;              FILE *fp = fopen("1.txt","at");                          fwrite(c,strlen(c),1,fp);                        fclose(fp);             if(c[0]==13)             {                 c[0]=10;             FILE *fp = fopen("1.txt","at");                         fwrite(c,strlen(c)/2,1,fp);                        fclose(fp);             }         }     }    return CallNextHookEx(hKeyHook,nCode,wParam,lParam);}MYHOOK_API LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam){    SendMessage(parHwnd,WM_MOUSE_HOOK,wParam,lParam);    return CallNextHookEx(hMouseHook,nCode,wParam,lParam);}

然后我写了一个EXE程序调用这个钩子DLL,但是只有在EXE获得焦点时,才能获取到钩子信息,如果不是当前获焦点窗体的话,就不能获得钩子信息,这个是我是VC写的DLL库,改过来了用BCB写的,用VC写时,可以钩到全局的消息!

[解决办法]
SetWindowsHookEx 时换成 WH_MOUSE_LL,WH_KEYBOARD_LL 试试

热点排行