#include <windows.h> #include <stdio.h> //当前线程id DWORD g_tid = 0; //钩子 HHOOK g_hook = 0; HHOOK m_hook = 0; BOOL CALLBACK con_handler(DWORD g_tid) { PostThreadMessage(g_tid, WM_QUIT, 0, 0); return TRUE; } //键盘钩子回调函数 LRESULT CALLBACK kb_proc(int code, WPARAM w, LPARAM l) { KBDLLHOOKSTRUCT* pStruct = (KBDLLHOOKSTRUCT*)l; if (w==WM_KEYDOWN || w==WM_SYSKEYDOWN) { /*/ FILE *fl=fopen("C://zaroty.TXT","a+"); fprintf(fl,"%s",l,""); fprintf(fl,"%4d/n",w); fclose(fl); //*/ if ((pStruct->flags & LLKHF_ALTDOWN) != 0) { return 1 ; } switch (pStruct->vkCode) { // 句号 case 190: break; case 46: break; // A~Z case 'A': break; case 'B': break; case 'C': break; case 'D': break; case 'E': break; case 'F': break; case 'G': break; case 'H': break; case 'I': break; case 'J': break; case 'K': break; case 'L': break; case 'M': break; case 'N': break; case 'O': break; case 'P': break; case 'Q': break; case 'R': break; case 'S': break; case 'T': break; case 'U': break; case 'V': break; case 'W': break; case 'X': break; case 'Y': break; case 'Z': break; //0-9 case '1': break; case '2': break; case '3': break; case '4': break; case '5': break; case '6': break; case '7': break; case '8': break; case '9': break; case '0': break; case VK_NUMPAD1: break; case VK_NUMPAD2: break; case VK_NUMPAD3: break; case VK_NUMPAD4: break; case VK_NUMPAD5: break; case VK_NUMPAD6: break; case VK_NUMPAD7: break; case VK_NUMPAD8: break; case VK_NUMPAD9: break; case VK_NUMPAD0: break; default: { return 1 ; } } } return CallNextHookEx(g_hook, code, w, l); } //鼠标钩子回调函数 LRESULT CALLBACK ms_proc(int code, WPARAM w, LPARAM l) { LPMOUSEHOOKSTRUCT pMouseHook=(MOUSEHOOKSTRUCT FAR *)l; HWND glhTargetWnd=pMouseHook->hwnd; //取目标窗口句柄 //获取屏幕的宽度和高度 int nFullWidth=GetSystemMetrics(SM_CXSCREEN); int nFullHeight=GetSystemMetrics(SM_CYSCREEN); POINT p ; GetCursorPos(&p); RECT rect; ::GetWindowRect(glhTargetWnd,&rect); rect.left=0 ; rect.top=0 ; rect.bottom=nFullHeight ; rect.right=nFullWidth-10 ; ClipCursor(&rect); return CallNextHookEx(m_hook, code, w, l); } //加载钩子 BOOL initsethook() { g_tid = GetCurrentThreadId(); SetConsoleCtrlHandler(&con_handler, TRUE); g_hook = SetWindowsHookEx(WH_KEYBOARD_LL, &kb_proc, GetModuleHandle(NULL),0); m_hook = SetWindowsHookEx(WH_MOUSE_LL, &ms_proc, GetModuleHandle(NULL),0); return TRUE; } //卸载钩子 BOOL unsethook() { UnhookWindowsHookEx(g_hook); UnhookWindowsHookEx(m_hook); return TRUE; } int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow) { HWND hwnd; /* This is the handle for our window */ MSG messages; /* Here messages to the application are saved */ //调用加载钩子方法 initsethook(); /* Run the message loop. It will run until GetMessage() returns 0 */ while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); } //调用卸载钩子方法 unsethook(); /* The program return-value is 0 - The value that PostQuitMessage() gave */ return messages.wParam; }