波哥写的钩子教程2

【小白必看】什么是hook(钩子)? 钩子”是一种特殊的消息处理机制,它可以监视系统或者进程中的各种事件消息,截获发往目标窗口的消息并进行处理。我们可以在系统中自定义钩子,用来监视系统中特定事件的发生,完成特定功能,如屏幕取词,监视日志,截获键盘、鼠标输入等等。钩子的种类很多,每种钩子可以截获相应的消息,如键盘钩子可以截获键盘消息,外壳钩子可以截取、启动和关闭应用程序的消息等。钩子可以分为线程钩子和系统钩子,线程钩子可以监视指定线程的事件消息,系统钩子监视系统中的所有线程的事件消息。 阅读详情


钩子技术(五)
来源: 任立波的日志
认识完各种钩子类型之后,接下来了解和钩子如影随形的钩子子程,即相应的回调函数。

了解这些是可以使用钩子的一个开始。

方法1:CallMsgFilter Function

The CallMsgFilter function passes the specified message and hook code to the hook procedures associated with the WH_SYSMSGFILTER and WH_MSGFILTER hooks. A WH_SYSMSGFILTER or WH_MSGFILTER hook procedure is an application-defined callback function that examines and, optionally, modifies messages for a dialog box, message box, menu, or scroll bar.

CallMsgFilter方法传递特定的消息和钩子代码到与WH_SYSMSGFILTER 和 WH_MSGFILTER钩子相关联的钩子子程。 WH_SYSMSGFILTER或者 WH_MSGFILTER钩子子程是应用程序定义的回调函数,该回调函数用来检验、选择、修改传递给对话框、消息框、菜单或者滚动条的消息,

语法:BOOL CallMsgFilter

(      
        LPMSG lpMsg,

    int nCode

);

参数说明 :

lpMsg :[in] Pointer to an MSG structure that contains the message to be passed to the hook procedures.指向MSG结构的指针,该结构包含有即将传递给钩子子程的消息。

nCode :[in] Specifies an application-defined code used by the hook procedure to determine how to process the message. The code must not have the same value as system-defined hook codes (MSGF_ and HC_) associated with the WH_SYSMSGFILTER and WH_MSGFILTER hooks.

指定应用程序定义的代码,钩子子程使用该代码来决定如何处理消息。该代码不能与系统定义的与WH_SYSMSGFILTER 和 WH_MSGFILTER钩子相关的钩子代码 (MSGF_ and HC_)相同。

Return Value:If the application should process the message further, the return value is zero.

If the application should not process the message further, the return value is nonzero.

如果应用程序应该进一步处理该消息,返回值为0;如果不处理,返回非0值。

Remarks

The system calls CallMsgFilter to enable applications to examine and control the flow of messages during internal processing of dialog boxes, message boxes, menus, and scroll bars, or when the user activates a different window by pressing the ALT+TAB key combination.

Install this hook procedure by using the SetWindowsHookEx function.

系统调用CallMsgFilter方法来允许应用程序检查、控制在对话框、消息框、菜单、滚动条内部处理中的消息的流动,或者当用户通过按下ALT+TAB组合键激活不同的窗口时的信息流动。

通过SetWindowsHookEx方法来安装该钩子子程。

方法2 :CallNextHookEx Function

The CallNextHookEx function passes the hook information to the next hook procedure in the current hook chain. A hook procedure can call this function either before or after processing the hook information.

CallNextHookEx方法将钩子信息传递给当前钩子链表中的下一个钩子子程。钩子子程能够在处理钩子信息之前或者之后调用该方法。

Syntax  :LRESULT CallNextHookEx(      
                  HHOOK hhk,

    int nCode,

    WPARAM wParam,

    LPARAM lParam

);

Parameters

hhk :Ignored. 被忽略。

nCode  :[in] Specifies the hook code passed to the current hook procedure. The next hook procedure uses this code to determine how to process the hook information.

wParam :[in] Specifies the wParam value passed to the current hook procedure. The meaning of this parameter depends on the type of hook associated with the current hook chain.。

lParam :[in] Specifies the lParam value passed to the current hook procedure. The meaning of this parameter depends on the type of hook associated with the current hook chain.

wParam  /  lParam :这两个参数分别指定传递给当前钩子子程的wParam  / lParam值。参数的意义取决于与当前钩子链表相关联的钩子类型。

Return Value:返回值

This value is returned by the next hook procedure in the chain. The current hook procedure must also return this value. The meaning of the return value depends on the hook type.该值由钩子链表中的下一个钩子子程返回。当前钩子子程也必须返回该值。返回值的意义取决于钩子类型。

Remarks 注意

Hook procedures are installed in chains for particular hook types. CallNextHookEx calls the next hook in the chain.

Calling CallNextHookEx is optional, but it is highly recommended; otherwise, other applications that have installed hooks will not receive hook notifications and may behave incorrectly as a result. You should call CallNextHookEx unless you absolutely need to prevent the notification from being seen by other applications.

钩子子程为了特定的钩子类型而被安装。CallNextHookEx方法调用钩子链表中的下一个钩子。调用CallNextHookEx是可选的,但是强烈要求调用该函数;否则,其他已经安装有钩子的应用程序将收不到钩子通知,从而可能导致不正确的行为。除非绝对需要阻止通知被其他应用程序看到,其它情况下都应该调用CallNextHookEx方法

方法3 :CallWndProc Function

The CallWndProc hook procedure is an application-defined or library-defined callback function used with the SetWindowsHookEx function.

CallWndProc钩子子程是与SetWindowsHookEx一起使用的、用户定义的或者库定义的回调函数。

The HOOKPROC type defines a pointer to this callback function. CallWndProc is a placeholder for the application-defined or library-defined function name.

HOOKPROC类型定义了指向该回调函数的指针。CallWndProc是程序定义的或者库定义的方法名字。

Syntax :语法    LRESULT CALLBACK CallWndProc(      
                   Int nCode,

          WPARAM wParam,

          LPARAM lParam

);

Parameters 参数:

nCode  : [in] Specifies whether the hook procedure must process the message. If nCode is HC_ACTION, the hook procedure must process the message. If nCode is less than zero, the hook procedure must pass the message to the CallNextHookEx function without further processing and must return the value returned by CallNextHookEx.

指定钩子子程是否必须处理该消息。如果nCode是HC_ACTION,钩子子程就必须处理该消息。如果nCode小于0,钩子子程就必须将该消息传递给CallNextHookEx,自己不对消息进行进一步的处理,必须返回由CallNextHookEx 方法返回的返回值。

wParam :[in] Specifies whether the message was sent by the current thread. If the message was sent by the current thread, it is nonzero; otherwise, it is zero. 指定消息是否由当前线程发出。如果消息是由当前线程发出的,该值就是非0;否则,就是0。

lParam :[in] Pointer to a CWPSTRUCT structure that contains details about the message.

指向CWPSTRUCT结构的指针,该结构含有消息的细节信息。

Return Value 返回值

If nCode is less than zero, the hook procedure must return the value returned by CallNextHookEx.  If nCode is greater than or equal to zero, it is highly recommended that you call CallNextHookEx and return the value it returns; otherwise, other applications that have installed WH_CALLWNDPROC hooks will not receive hook notifications and may behave incorrectly as a result. If the hook procedure does not call CallNextHookEx, the return value should be zero.

如果nCode小于0,钩子子程必须返回由CallNextHookE方法返回的返回值。如果nCode大于等于0,强烈要求调用CallNextHookEx方法,并返回由它返回的返回值;否则,其他已经安装了WH_CALLWNDPROC钩子的应用程序将收不到钩子通知,可能导致行为的错误。如果钩子子程没有调用CallNextHookEx方法,返回值应该为 0。

Remarks 备注

The CallWndProc hook procedure can examine the message, but it cannot modify it. After the hook procedure returns control to the system, the message is passed to the window procedure.

An application installs the hook procedure by specifying the WH_CALLWNDPROC hook type and a pointer to the hook procedure in a call to the SetWindowsHookEx function.

CallWndProc钩子子程能够检查消息,但是不能修改消息。当钩子子程将控制权交还给系统之后,消息被传递给窗体程序。

应用程序这样安装钩子子程:指定WH_CALLWNDPROC钩子类型,指定一个指向调用SetWindowsHookEx方法的钩子子程的指针。

钩子编程(HOOK) 留后门与钩子卸载 (2) [钩子编程(HOOK) 留后门与钩子卸载]根据前面几篇文章对进程内钩子有了个初步了解,本文继续谈及钩子卸载问题。一般编写钩子程序,我们希望程序一方面能屏蔽键盘鼠标消息,但又希望程序能留有一个“后门”,例如,按下F2退出程序。 阅读详情

相关推荐

练习 进程钩子 全局钩子

C++ 关于钩子的知识点博客网上基本写的都非常详细,这里只是简单分享一下本人练手的编程步骤和一些简单认识。 钩子程序就大概分成了2种: (1) 进程中的钩子:它 的作用范围只是限定在某个进程中,或者某个线程中。比如我们只想起一个MFC程序,截获在这个MFC程序界面中的所有鼠标,键盘操作。这属于进程中的钩子。 编写普通的进程中的钩子demo,可以直接建立一个小MFC工程就可以了。

wochendaixin的博客 1462

9.2 Windows钩子

9.2 Windows钩子

qq_36314864的博客 1678

Delphi系统级钩子编程实践教程

本文还有配套的精品资源,点击获取 简介:Delphi是一个基于Pascal语言的集成开发环境,本教程旨在通过Delphi示例程序介绍系统级钩子的概念和实现方法。钩子是一种Windows系统机制,允许开发者拦截和处理特定事件,如键盘输入和鼠标点击。本Demo将详细展示如何使用Delphi语言结合Windows API函数 SetWindowsHookEx 来编写...

weixin_29317963的博客 1377

钩子函数(HOOK)完整的教程

基本概念 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩

camly的专栏 1万+

实现鼠标和键盘输入禁用的钩子技术教程

钩子技术(Hooking),是一种在操作系统底层截获系统或应用程序中消息、事件和函数调用的技术。在Windows操作系统中,它允许开发者注入自定义代码,以监控或修改系统或应用程序的行为,通常用于系统级编程、安全防护、自动化测试等领域。是Windows API中一个非常重要的函数,其核心作用在于安装一个钩子(hook),用于拦截并处理特定类型的系统消息。这些消息包括但不限于键盘输入、鼠标移动等,这使得开发者能够监测和修改系统消息,进而实现特定的功能需求,如屏幕键盘、自定义输入法、游戏辅助程序等。

weixin_42497762的博客 1243

Visual Studio 2010实现全局键盘鼠标钩子教程

在现代软件开发中,全局键盘鼠标钩子技术是构建各种应用程序的重要组成部分,它允许开发者捕获并处理系统级别的输入事件。本章节将为读者提供一个全局键盘鼠标钩子技术的概览,并讨论其工作原理以及在软件开发中的应用范围。钩子(Hook)技术是一种用于改变或增强操作系统、应用程序或软件库行为的技术。在Windows操作系统中,钩子是通过钩子链(Hook Chain)实现的,它允许系统或应用程序截获并处理其他进程的消息和事件。

weixin_36303305的博客 984

钩子(HOOK)函数教程

http://blog.sina.com.cn/s/articlelist_1585708262_3_1.html钩子(HOOK)函数教程(一)我们可以首先从字面上了解钩子,钩子是干什么的呢?日常生活中,我们的钩子是用来钩住某种东西的,比如,说,鱼钩是用来钓鱼的,一旦鱼咬了钩,钩子就一直钩住鱼了,任凭鱼在水里怎么游,也逃不出鱼钩的控制。同样的,Windows的钩子Hook也是用来钩东西的,比较抽...

心情第一 5万+

钩子技术HOOK使用教程

钩子函数实际上是一个处理消息的程序段,每当一个应用程序调用函数GetMessage或PeekMessage而恰有一个消息即将被处理时,系统调用钩子函数。也就是说,当特定的息发出,在没有到达目的窗口前,钩子函数先捕获消息,亦即钩子函数先获得控制权。这时钩子函数既可以加工处理该消息,也可以不作处理而继续传递消息,还可以强制结束消息传递。系统为每种类型的钩子维护一个钩子链,最近安装的钩子放在链的开始,而最先安装的钩子放在最后,也就是后加入的钩子先获得控制权。 Windows API函数SetWindowsHookEx用来安装钩子函数,这个函数的原型是HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId),其中第一个参数是钩子的类型;第二个参数是钩子函数的地址;第三个参数是包含钩子函数的模块句柄;第四个参数指定监视的线程,如果指定确定的线程,即为线程钩子,如果指定为空,则为全局钩子。其中,全局钩子必须包含在DLL中,线程专用钩子可以包含在可执行文件中。得到控制权的钩子函数在完成对消息的处理后,如果想要该消息继续传递,那么它必须调用另一个API函数CallNextHookEx来传递它,钩子函数也可以通过直接返回0来丢弃该消息,以阻止消息的传递。

波哥写的钩子教程4

钩子技术(六) 来源: 任立波的日志 方法5  :  CBTProc Function The CBTProc hook procedure is an application-defined or library-defined callback function used with the SetWindowsHookEx function. The system calls this fu

windworst的专栏 589

Windows钩子教程

windows钩子入门教程,适合新手。 来源:一路采撷 Blog:http://blog.youkuaiyun.com/MaybeHelios/

在已有win10系统下安装Ubuntu,最后出现执行‘grub-install/dev/nvme0n1p5‘失败的致命错误的解决方案

本人电脑型号戴尔灵越,两个SSD512G固态硬盘,c盘为系统盘. Ubuntu版本为20.04LTS,在官网下载https://ubuntu.com/download/desktop/thank-you?version=20.04.3&architecture=amd64 系统盘制作工具为Rufus-3.15http://rufus.ie/zh/ 安装过程网上很多,在这里就不赘述了. 其他安装过程都很顺利,直至安装最后出现这个 本来安装了到最后还以为成了,结果又不行...... 后.

XiaoChen_gugugu的博客 1万+

钩子函数介绍和总结

Author:快来救救我 ps:快乐废宅 文章目录前言一、钩子函数(Hook)是什么?理解:特点:举例钩子类型二、使用步骤1.引入库2.读入数据总结 前言 我看了其他博客有些对钩子函数讲述的篇幅要不太长,要不太短,所以我打算写一个中等篇幅的,易于看完也能对它大体概况。我也会在后面附上参考的其他人的博客,想要看简短或者详细的,可以点击链接去看。 在开发当作有碰见过几次钩子函数但是一直对这个没有什么概念,所以特意来了解了解,如若有理解错误,请再底下评论,后续会持续更改~ 一、钩子函数(Hook)是什么? 理.

qq_43614246的博客 3万+

实战指南:R语言多组倾向评分逆概率加权(IPTW)建模与结果解读

本文详细介绍了如何使用R语言实现多组倾向评分逆概率加权(IPTW)建模,包括数据预处理、倾向评分估计、权重计算及结果解读。通过实战案例演示,帮助研究者掌握这一统计方法,有效平衡多组混杂因素,模拟随机对照试验效果,适用于医学、社会科学等领域的数据分析。

weixin_42528534的博客 395

深入解析Vue2生命周期钩子

Vue2的生命周期钩子是Vue实例在不同阶段自动调用的函数,帮助开发者在组件的创建、更新、销毁等关键阶段进行控制。主要生命周期钩子包括:beforeCreate(实例初始化后,数据观测和事件配置前)、created(实例创建完成,数据观测和事件配置完成)、beforeMount(挂载开始前,模板编译完成)、mounted(实例挂载到DOM后)、beforeUpdate(数据更新时,DOM重新渲染前)、updated(数据更新后,DOM重新渲染完成)、beforeDestroy(实例销毁前)、destroye

TT_BC的博客 2412

LightningChart使用教程:创建 JS 散点图

这是对 LightningChart JS XY 图表一些有趣功能的快速技术研究,以及如何使用 LightningChart JS 创建嵌入式散点聊天和添加自定义交互。 此图表将可视化一个 XY 坐标列表以及一个额外的自定义属性,它只是一段文本。这些自定义属性将与 UI 文本元素一起显示,这些元素将与用户的鼠标移动交互。 我们将介绍的突出功能是: 什么是散点图? 如何创建散点图? 如何将自定义属性附加到数据点。 如何创建交互式 UI 文本元素。 最终结果 什么是散点图? 散点图或散点图是..

Augenstern__zyx的博客 1370

【Claude Code 实战】第十章:DevOps 与 CI/CD 集成 / 光子AI

本章摘要:探讨Claude Code在DevOps与CI/CD集成中的应用。DevOps作为现代软件工程核心,结合AI技术实现自动化全流程,从代码提交到生产部署。通过CALMS模型(文化、自动化、精益、度量、分享)解析DevOps理念,对比传统瀑布模式与DevOps模式差异,展示AI如何加速Dockerfile编写、CI/CD配置等任务。典型示例显示AI可将原本30-60分钟的手动配置缩短至1-2分钟,大幅提升DevOps效率。

AI天才研究院 367

钩子函数教程

 钩子函数教程Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能。钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获

淡蓝色的帆 -编程空间 2111

FC7300 SPI MCAL配置引导

Example - QMI8A01z外设:Example - QMI8A01z外设:

舊梦的博客 257

钩子函数(键盘钩子C#)

该例子实现的效果是:拦截键盘的输入,如果输入的是B键或者是b键,就弹出消息框来表示一下拦截到了 步骤: 1 新建Winform应用程序,工程命名为HookDemo,把默认生成的窗体名称改为HookTest 2 新建一个类,名为Hook 编写代码如下: using System; using System.Collections.Generic; using System.Linq; u...

zxy13826134783的博客 3381

【系统架构设计师】二十三、通信系统架构设计理论与实践①

通信网络主要形式:局域网、广域网、移动通信网。 局域网网络架构有 4 种类型:单核心架构、双核心架构、环型架构、层次型架构。 广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成。通常,在大型网络构建中,通过广域网将分布在各地域的局域网互连起来,形成一个大的网络。 移动通信网为移动互联网提供了强有力的支持,尤其是5G 网络为个人用户、垂直行业等 提供了多样化的服务。

帅次的博客 3762

容器化部署指南——Docker/K8s环境下的OpenClaw实践(附Dockerfile)

通过本文的详细指导,你已经掌握了OpenClaw在Docker和Kubernetes环境中的容器化部署方法。从基础镜像构建到高级部署策略,从开发环境到生产环境,你现在已经具备了完整的容器化部署能力。 容器化技术为OpenClaw提供了灵活、可扩展、可移植的部署方案,能够满足不同规模和需求的应用场景。通过合理使用Docker和Kubernetes,你可以实现高效的部署管理和运维自动化。 在实际应用中,建议根据具体的业务需求选择合适的部署策略,并结合监控、日志、安全等最佳实践,确保系统的稳定性和可靠性。同时

博客 494

vue2的所有路由钩子解析

当你在Vue.js中使用路由时,路由钩子函数是非常有用的工具,它们允许你在路由导航过程中执行特定的操作。在Vue.js 2中,有几种不同类型的路由钩子函数,每一种都有其独特的用途和时机。让我们逐一来了解这些路由钩子函数。

前端程序猿的博客 1214

自然语言处理6 -- 情感分析

1 概述 情感分析是自然语言处理中常见的场景,比如淘宝商品评价,饿了么外卖评价等,对于指导产品更新迭代具有关键性作用。通过情感分析,可以挖掘产品在各个维度的优劣,从而明确如何改进产品。比如对外卖评价,可以分析菜品口味、送达时间、送餐态度、菜品丰富度等多个维度的用户情感指数,从而从各个维度上改进外卖服务。 情感分析可以采用基于情感词典的传统方法,也可以采用基于深度学习的方法,下面详细讲解 ...

谢杨易的博客 5万+

vue2.x 生命周期钩子

vue2.x 生命周期钩子函数

monian187的博客 1322

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

vue2中各种钩子函数的总结以及使用场景

vue2中各种钩子函数的总结以及使用场景

涉及毕业论文、远程调试、网站、小程序、app、python、前端、pycharm、vscode等 1375

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

超详细的 pytest 钩子函数 之初始钩子和引导钩子来啦

钩子函数在 pytest 称之为 Hook 函数,它 pytest 框架的开发者,为了让用户更好的去扩展开发预留的一些函数。而预留的这些函数,在整个测试执行的生命周期中特定的阶段会自动去调用执行。如下图:关于 pytest 中的预留钩子,可以通过开发插件,和在 conftest.py 去实现这些钩子。每个钩子函数可以在多个插件中实现,每个钩子和执行的函数比是:1:N。

2301_78843735的博客 1035

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 波哥写的钩子教程
下一篇: 波哥写的钩子教程3
龍城狂霸拽爺
博客等级 码龄16年 10粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值