windows hookDemo

windows编程窗口创建以及hook(钩子函数)的简单使用:

#include
//winMain:入口函数,HINSTANCE:应用程序实例句柄类型//回调函数
LRESULT CALLBACK  WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);//鼠标钩子处理函数
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam);
//键盘钩子处理函数
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);//鼠标钩子句柄
HHOOK g_hMouseHook;
//键盘钩子句柄
HHOOK g_hKeyboardHook;//窗口句柄
HWND g_hWnd;int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow) {//1,设计窗口类TCHAR  szAppClassName[] = TEXT("hookDemo");WNDCLASS wc = { 0 };wc.cbClsExtra = 0;                  //窗口类的额外空间大小wc.cbWndExtra = 0;                 //窗口的额外空间大小wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //白色画刷wc.hCursor = LoadCursor(NULL, IDC_ARROW);   //光标句柄wc.hIcon = NULL;                    //窗口图标wc.hInstance = hInstance;        //   当前应用程序实例句柄wc.lpfnWndProc = WindowProc; //窗口处理函数wc.lpszClassName = szAppClassName;  //窗口类型名wc.lpszMenuName = NULL;wc.style = CS_HREDRAW | CS_VREDRAW; //窗口类的风格//2,注册窗口类RegisterClass(&wc);//3,创建窗口g_hWnd = CreateWindow(szAppClassName, TEXT("我只是win32 hook编程的demo"), WS_OVERLAPPEDWINDOW, 400, 200, 800, 600, NULL, NULL, hInstance, NULL);//4,显示窗口ShowWindow(g_hWnd, SW_SHOW);//5,更新窗口UpdateWindow(g_hWnd);//6,消息循环,windows应用程序是通过消息机制驱动运行MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);   //将虚拟键信息转换为字符信息DispatchMessage(&msg); //将消息分发给窗口处理函数}return 0;}LRESULT CALLBACK  WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch (uMsg) {case WM_CREATE: //窗口创建消息g_hMouseHook = SetWindowsHookEx(WH_MOUSE, MouseProc, NULL, GetCurrentThreadId());g_hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, NULL, GetCurrentThreadId());break;case WM_MOUSEMOVE:// 鼠标移动消息{//根据当前鼠标的位置int x = LOWORD(lParam); int y = HIWORD(lParam);TCHAR str[255];wsprintf(str, L"当前鼠标坐标(%d,%d)", x, y);SetWindowText(hWnd, str);}break;case WM_LBUTTONDOWN: //鼠标按下消息MessageBox(hWnd, L"鼠标按下", L"提示", MB_OK);break;case WM_KEYDOWN: //键盘按下消息MessageBox(hWnd, L"键盘按下", L"提示", MB_OK);break;case WM_CLOSE: //窗口关闭消息DestroyWindow(hWnd);break;case WM_DESTROY: //窗口销毁消息PostQuitMessage(0); //WM_QUITbreak;}return DefWindowProc(hWnd, uMsg, wParam, lParam);}LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) {// return 1;  //表示对当前消息已经处理了,这样消息也就不会向下传递return CallNextHookEx(g_hMouseHook, nCode, wParam, lParam);  //放行}
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {//return 1;//屏蔽所有键//屏蔽空格键if (wParam == VK_SPACE) {return 1;}elsereturn CallNextHookEx(g_hKeyboardHook, nCode, wParam, lParam);  //其他键放行if (wParam == VK_F2) {//卸载所有钩子UnhookWindowsHookEx(g_hMouseHook);UnhookWindowsHookEx(g_hKeyboardHook);return 1;}}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部