安装全局钩子程序(鼠标钩子)
来源:互联网 发布:储存卡损坏数据恢复 编辑:程序博客网 时间:2024/05/21 16:23
新建win32 dynamic link library HookDll,有两个文件.c和.def
HookDll.c
#include <windows.h>HHOOK mouseHook; //接收由SetWindowsHookEx返回的旧的钩子HINSTANCE hmod;BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved){hmod = hinstDLL;return TRUE;}//回调函数,用于处理截获的按键消息LRESULT CALLBACK MouseProc(int code, WPARAM wParam, LPARAM lParam){if(wParam == WM_RBUTTONDOWN){MessageBox(NULL,TEXT("aaa"), TEXT("bbb"), MB_OK); //输出按键信息,注意这里按下和弹起都会输出return 1;}else{return CallNextHookEx(mouseHook,code,wParam,lParam); //将消息还给钩子链,不要影响别人}}void SetHook(){//安装钩子mouseHook = SetWindowsHookEx(WH_MOUSE, (HOOKPROC)&MouseProc, //回调函数地址 hmod, 0);} void UnLockHook(){UnhookWindowsHookEx (mouseHook);}
HookDll.def
LIBRARY HookDllEXPORTSSetHook @1UnLockHook @2
加入.def文件即可生成.lib(或者在函数前加extern "C"),表示以C的方式编译导出
在P先生的Hello win98 基础上加入钩子
/*------------------------------------------------------------HELLOWIN.C -- Displays "Hello, Windows 98!" in client area(c) Charles Petzold, 1998------------------------------------------------------------*/#include <windows.h>#pragma comment(lib,"HookDll");_declspec(dllimport) void SetHook();_declspec(dllimport) void UnLockHook();LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; HWND hwnd ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){static TCHAR szAppName[] = TEXT ("HelloWin") ;MSG msg ;WNDCLASS wndclass ;wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass.lpfnWndProc = WndProc ;wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;wndclass.lpszMenuName = NULL ;wndclass.lpszClassName = szAppName ;if (!RegisterClass (&wndclass)){MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ;return 0 ;}hwnd = CreateWindow (szAppName, // window class name TEXT ("The Hello Program"), // window caption WS_OVERLAPPEDWINDOW, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position CW_USEDEFAULT, // initial x size CW_USEDEFAULT, // initial y size NULL, // parent window handle NULL, // window menu handle hInstance, // program instance handle NULL) ; // creation parametersShowWindow (hwnd, iCmdShow) ;UpdateWindow (hwnd) ;while (GetMessage (&msg, NULL, 0, 0)){TranslateMessage (&msg) ;DispatchMessage (&msg) ;}return msg.wParam ;}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){HDC hdc ;PAINTSTRUCT ps ;RECT rect ;POINT point;int x, y;switch (message){case WM_CREATE://PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;//安装钩子SetHook();return 0 ;case WM_KEYDOWN:hdc = GetDC(hwnd);GetCursorPos(&point);// 获取鼠标指针位置(屏幕坐标)ScreenToClient(hwnd, &point);// 将鼠标指针位置转换为窗口坐标switch(wParam){case VK_SPACE:TextOut (hdc, point.x, point.y, TEXT("hello left!"), 12);}ReleaseDC(hwnd, hdc);return 0;case WM_RBUTTONDOWN:hdc = GetDC(hwnd);x = LOWORD(lParam);y = HIWORD(lParam);TextOut (hdc, x, y, TEXT("hello right!"), 12);ReleaseDC(hwnd, hdc);return 0;case WM_PAINT:hdc = BeginPaint (hwnd, &ps) ;GetClientRect (hwnd, &rect) ;DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;EndPaint (hwnd, &ps) ;return 0 ;case WM_DESTROY:UnLockHook();PostQuitMessage (0) ;return 0 ;}return DefWindowProc (hwnd, message, wParam, lParam) ;}
不知道为什么,鼠标右键点击一次,会产生很多的消息窗口??
0 0
- 安装全局钩子程序(鼠标钩子)
- 控制台程序安装全局钩子
- 安装进程内钩子程序(鼠标钩子和键盘钩子)
- 鼠标全局钩子
- 全局鼠标钩子
- C#全局鼠标钩子
- C# 鼠标全局钩子
- 鼠标全局钩子
- 全局钩子(hook鼠标键盘消息)
- 钩子编程(HOOK) 安装系统全局钩子
- Delphi实现全局鼠标钩子
- Windows 全局 鼠标 钩子 DLL
- pyqt全局鼠标事件/钩子
- 鼠标钩子程序资料
- 鼠标钩子程序资料
- 钩子编程(HOOK) 安装进程内鼠标钩子
- 钩子初步——鼠标钩子程序
- 全局钩子ESC 关闭程序
- linux 下显示隐藏文件夹
- HEVC标准概览
- Java中的可变类和不可变类
- 学习笔记:数据结构(二)栈与队列
- 线程并发库
- 安装全局钩子程序(鼠标钩子)
- 《c++ primer》学习笔记 第四章 数组与指针
- 设计模式1——Abstract Factory模式(C++实现)
- 21天战拖记——Day6:复习阶段性完成!(2014-05-09)
- 交换排序:快速排序
- 如何卸载Chrome应用程序
- 石子合并(区间dp)
- HDMI热插拔检测原理
- Samba服务器配置 smb.conf