全局钩子例子

全局钩子例子全局 HOOK 要做成 DLL 模块 被系统调用 从而实现全局监控 在 DLL 中要实现 HOOK 处理函数 SetWindowsHo 和 UnhookWindow 函数 一 VC 建立 DL L 工程 二 添加自己的函数 监控某窗口的键盘消息 实现屏蔽系统键 添加的全局键盘钩子代码

全局HOOK要做成DLL模块,被系统调用,从而实现全局监控。在DLL中要实现HOOK处理函数、 SetWindowsHookEx和UnhookWindowsHookEx函数。

一、VC建立DL:L工程。
二、添加自己的函数(监控某窗口的键盘消息,实现屏蔽系统键)
添加的全局键盘钩子代码:
//
HWND m_hLWnd=NULL;  //监视的窗口句柄
HWND m_hPWnd=NULL;  //处理该消息的窗口句柄
HHOOK g_hHookKbdLL;  //HOOK句柄
extern “C” _declspec(dllexport) LRESULT CALLBACK GlobalKeyHOOK(
                                      int nCode,      // hook code
                                      WPARAM wParam,  // message identifier
                                      LPARAM lParam   // mouse coordinates
)
{
    HWND hwnd=GetActiveWindow();
    if(hwnd==m_hLWnd)
    {
        KBDLLHOOKSTRUCT* pKBDLLHOOK=(KBDLLHOOKSTRUCT*)lParam;
        if(pKBDLLHOOK->flags&0x80)//按下
        {
            PostMessage (m_hPWnd, WM_KEYUP,pKBDLLHOOK->vkCode,0);
        }
        else//释放
        {
            PostMessage (m_hPWnd, WM_KEYDOWN,pKBDLLHOOK->vkCode,0);
        }

        return 1;
    }
    return 0;
}
extern “C” _declspec(dllexport) void SetHOOKWindow(HWND ListenHwnd,HWND ProHwnd)
{
    m_hLWnd=ListenHwnd;
    m_hPWnd=ProHwnd;
}
//
extern “C” _declspec(dllexport) void SetHOOK()
{
    g_hHookKbdLL = SetWindowsHookEx(WH_KEYBOARD_LL,GlobalKeyHOOK,
        (HINSTANCE__ *)m_hModule, 0);  //m_hModule是从模块入口函数DllMain()的模块句柄参数赋值而得
}
extern “C” _declspec(dllexport) void UnSetHOOK()
{
    if(g_hHookKbdLL)
    {
        UnhookWindowsHookEx(g_hHookKbdLL);
    }
}

三、调用
1、建立调用工程。
2、调用代码
//声明DLL中将要用到的函数的指针
void (*SetHook)(void);
void (*SetHOOKWindow)(HWND ListenHwnd,HWND ProHwnd);

//具体调用代码
HOOKPROC GlobalMouseProc;
HINSTANCE hinstDLL;
HHOOK MK_HOOK;
hinstDLL = LoadLibrary((LPCTSTR) “G://MyProgram//MKHooks//Debug//MKHooks.dll”);
if(NULL==hinstDLL)AfxMessageBox(“Load DLL ERROR”);

SetHook=(void (__cdecl *)(void))GetProcAddress(hinstDLL, “SetHOOK”);
SetHOOKWindow=(void (__cdecl *)(struct HWND__ *,struct HWND__ *))GetProcAddress(hinstDLL, “SetHOOKWindow”);
SetHOOKWindow(this->m_hWnd,m_hProWnd);
SetHook();

(Windows  HOOK 函数查看MSDN)




































































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

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

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


相关推荐

  • beta分布的均值和方差_二维均匀分布的期望和方差

    beta分布的均值和方差_二维均匀分布的期望和方差均值为a+b2\frac{a+b}{2}2a+b​,总数n为(b−a)(b-a)(b−a)方差=(x−均值)2n\frac{(x-均值)^2}{n}n(x−均值)2​所以[a,b]均匀分布的方差为:∫ab(x−a+b2)2dx(b−a)\frac{\int_a^b(x-\frac{a+b}{2})^2dx}{(b-a)}(b−a)∫ab​(x−2a+b​…

    2026年1月18日
    5
  • 大数据技术大致包含哪些内容「建议收藏」

    大数据技术大致包含哪些内容「建议收藏」关于大数据的概念,指的是无法在一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合。而大数据技术,是指从各种各样类型的数据中,快速获得有价值信息的能力。那么关于大数据的技术大致包含哪些内容?一、数据采集ETL工具负责将分布的、异构数据源中的数据如关系数据、平面数据文件等抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础。二…

    2022年5月28日
    48
  • Vue双向绑定原理

    Vue双向绑定原理vue的双向绑定原理:vue数据的双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的。其核心就是通过obj.defineProperty()方法来实现数据的劫持,在数据变化时发布消息给订阅者,触发相应的监听回调。也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变;简单介绍一下Object.defineProperty()方法:1、Object.defineProperty(obj,prop,descriptor),这个语法内有三个参数,分别为obj(要定

    2022年10月18日
    8
  • Android开发之startActivityForResult过时的替代方案

    Android开发之startActivityForResult过时的替代方案如上图所示:在api29中提示已过时,官方给出的替代方案是上面第二个红框的方法registerForActivityResult该怎么用呢?先看kotlin版本的写法:privatevalstartActivity=registerForActivityResult(ActivityResultContracts.StartActivityForResult()){//此处是跳转的result回调方法if..

    2022年7月11日
    25
  • linux安装pycharm报错:Unable to detect graphics environment[通俗易懂]

    linux安装pycharm报错:Unable to detect graphics environment[通俗易懂]执行shpycharm.sh时,报错:StartupErrorUnabletodetectgraphicsenvironment解决方法:重新开启一个终端,以用户而非root身份登入,重新执行shpycharm.sh很神奇,但是成功了!

    2022年10月10日
    6
  • java 串讲_Java知识串讲

    java 串讲_Java知识串讲一 JDK 个版本之间的区别 1 JDK1 5 的新特性 泛型 ArrayListlis newArrayList gt ArrayListlis newArrayList 自动装箱 拆箱 for eachstaticim 静态导入 以前是 Math squrt squrt 边长参数 intsum int intlist 有任意

    2026年3月19日
    2

发表回复

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

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