转自:优快云
钩子(HOOK)机制的使用
作者:e梦缘
SetwindowsHookEx函数提供15种不同的消息监视类型,也就是15中不同的钩子。
分别用于捕获某一特定类型或某一范围的消息(如:键盘消息,鼠标消息等)。
我们这里仅以鼠标钩子的使用为例,讨论在DELPHI下怎样编写DLL程序和怎样在自己的程序中安装使用鼠标钩子函数。
Windows提供API函数SetwindowsHookEx来建立一个Hook,
通过这个函数可以将一个程序添加到Hook链中监视Windows消息,函数语法为:
SetWindowsHookEx(idHook: Integer; lpfn: TFNHookProc; hmod: HINST; dwThreadId: DWORD)
其中:
参数idHook指定建立的监视函数类型。
参数lpfn指定消息函数,在相应的消息产生后,系统会调用该函数并将消息值传递给该函数供处理。函数的一般形式为:
Hookproc (code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;
其中code为系统指示标记,wParam和lParam为附加参数,根据不同的消息监视类型而不同。只要在程序中建立这样一个函数再通过SetwindowsHookEx函数将它加入到消息监视链中就可以处理消息了。
由于钩子过滤函数必须在独立的模块中,也就是说我们必须首先生成一个DLL框架,然后再在其中加入钩子函数代码以及其他相关函数代码。
一、 钩子编写说明
1、先生成一个DLL框架
2、编写自己的钩子过滤函数
钩子过滤函数必须是回调函数,其函数的形式:
function KeyHookProc(
iCode:Integer;
wParam:WPARAM;
lParam:LPARAM ) : LRESULT; stdcall ;export ;
3、在生成的DLL框架中加入自己钩子的处理函数。
4、用SetWindowsHookEx函数(用法见上)安装HOOK
5、用UnHookWindowsHookEx卸载钩子
}
library mousehook;
uses
SysUtils,
Classes,Windows,messages,shellapi;
type
Tcallbackfun=procedure(info:pchar);
Tmousehook=record
isrun:boolean;
hook:hhook;
callbackfun:Tcallbackfun;
end;
var
mymousehook:Tmousehook;
{$R *.res}
function gethookinfo(code:integer;wp:WPARAM;lp:LPARAM):LResult;stdcall;
var
info:string;
begin
if code<0 then begin
result:= CallNextHookEx(mymousehook.hook,code,wp,lp);
exit;
end;
info:='';
Case wp of
WM_LBUTTONDOWN:begin
info:='WM_LBUTTONDOWN+';
end;
WM_LBUTTONUP:begin
info:='WM_LBUTTONUP+';
end;
WM_LBUTTONDBLCLK:begin
info:='WM_LBUTTONDBLCLK+';
end;
WM_RBUTTONDOWN:begin
info:='WM_RBUTTONDOWN+';
end;
WM_RBUTTONUP:begin
info:='WM_RBUTTONUP+';
end;
WM_RBUTTONDBLCLK:begin
info:='WM_RBUTTONDBLCLK+';
end;
WM_MBUTTONDOWN:begin
info:='WM_MBUTTONDOWN+';
end;
WM_MBUTTONUP:begin
info:='WM_MBUTTONUP+';
end;
WM_MBUTTONDBLCLK:begin
info:='WM_MBUTTONDBLCLK+';
end;
WM_NCMouseMove, WM_MOUSEMOVE:begin
info:='WM_MOUSEMOVE+';
end;
end;
info:=info+'pos('+inttostr(PMouseHookStruct(lp)^.pt.x)+','+inttostr(PMouseHookStruct(lp)^.pt.x)+')' ;
mymousehook.callbackfun(pchar(info));
result:= CallNextHookEx(mymousehook.hook,code,wp,lp);
end;
procedure installmousehook(callbackF:Tcallbackfun);stdcall;
begin
if not mymousehook.isrun then
begin
mymousehook.hook:=setwindowshookex(WH_MOUSE,@gethookinfo,HInstance,getcurrentthreadid());
mymousehook.callbackfun :=callbackf;
mymousehook.isrun:=not mymousehook.isrun;
end;
end;
procedure uninstallmousehook(); stdcall;
begin
if mymousehook.isrun then
begin
UnHookWindowsHookEx(mymousehook.hook);
mymousehook.callbackfun :=nil;
mymousehook.isrun:=not mymousehook.isrun;
end;
end;
Procedure DLLEntryPoint(dwReason:DWord);
begin
Case dwReason of
DLL_PROCESS_ATTACH:begin
mymousehook.isrun:=false;
end;
DLL_PROCESS_DETACH:;
DLL_THREAD_ATTACH:;
DLL_THREAD_DETACH:;
End;
end;
exports
installmousehook,
uninstallmousehook;
begin
DLLProc := @DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
--------------------------------------------------------------------------------
{
二、钩子的使用
1、调用钩子的DLL
2、安装钩子
3、一定不要忘了卸装钩子
}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
Tcallbackfun=procedure(info:pchar);
type
TForm1 = class(TForm)
memo: TMemo;
Button1: TButton;
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
procedure installmousehook(callbackF:Tcallbackfun);stdcall;external 'mousehook.dll';
procedure uninstallmousehook();stdcall;external 'mousehook.dll';
{$R *.dfm}
procedure addinfo(info:pchar);
begin
Tform1(application.MainForm ).memo.Lines.Add(info);
end;
//2、安装钩子
procedure TForm1.Button1Click(Sender: TObject);
begin
installmousehook(addinfo);
end;
//3、一定不要忘了卸装钩子
procedure TForm1.FormDestroy(Sender: TObject);
begin
uninstallmousehook();
end;
end.
相关推荐
Delphi系统级钩子编程实践教程
本文还有配套的精品资源,点击获取 简介:Delphi是一个基于Pascal语言的集成开发环境,本教程旨在通过Delphi示例程序介绍系统级钩子的概念和实现方法。钩子是一种Windows系统机制,允许开发者拦截和处理特定事件,如键盘输入和鼠标点击。本Demo将详细展示如何使用Delphi语言结合Windows API函数 SetWindowsHookEx 来编写...
API函数头部HOOK法
二.API函数头部HOOK法 本方法通过改变API函数的头部字节以达到HOOK的目的。 1. 技术与实现 每个程序中需要使用到的API函数的地址都放在IAT上,通过这个地址,每个CALL能正确的到达函数的头部。其流程如下图所示: 我们的截获工作就是在这个头部的位置——我们用一个JMP指令替换掉在这儿的一条或几条指令,让它指向各自的HOOKAPIPROX
全屏程序的系统功能屏蔽处理
我们在编写全屏应用程序时有时不希望受到一些系统功能的影响,例如:左右的“WIN键”,“Ctrl+ESC”,“Atl+F4”,任务栏,桌面菜单以及桌面右键菜单等等;因此我们需要通过代码屏蔽这些功能. 本文代码编辑环境:Delphi 7.0 所涉及到的技术:键盘HOOK,系统窗口查找与隐藏,消息过滤
用Delphi实现Windows的鼠标钩子函数
用Delphi实现Windows的鼠标钩子函数 Delphi是基于PASCAL语言的Windows编程工具,功能十分强大。然而在Delphi的帮助 文件中,对Windows API函数的说明沿袭了 VC 的格式,和VC一样,对很多API函数的用法 没有举例子详细说明,对一些深入系统内部的API函数更是语焉不详,给编程者带来不便。 笔者仅就在Windows编程中鼠标钩子函数(HO
hook_api_delphi_DELPHIHOOK_hook_
hook api in delphi windows
Python实战:高效稳定采集微信视频号评论的API爬虫方案
网络爬虫是数据采集领域的核心技术,其原理是通过程序模拟浏览器行为,向目标服务器发送HTTP请求并解析响应数据,从而自动化获取网页或接口中的信息。这项技术的核心价值在于能够高效、批量化地收集公开数据,为市场分析、舆情监控和竞品研究提供数据基础。在社交媒体分析、电商价格监控等应用场景中,爬虫技术尤为重要。针对微信视频号这类动态加载的复杂应用,传统的GUI自动化工具(如影刀RPA)常面临性能瓶颈和风控挑战。本文聚焦于通过Python实现**无感采集**,直接与后端**API接口**交互,构建稳定高效的评论数据采集
HOOK钩子机制学习笔记(3)
HOOK钩子机制学习笔记(3) - 钩子常用结构体MSDN翻译整理作者:MaybeHelios blog: http://blog.youkuaiyun.com/maybehelios/ 下面是应用Hook时会用到的各种结构。结构1:CBT_CREATEWND Structure The CBT_CREATEWND structure contains informat
51单片机学习(5)-----蜂鸣器的介绍与使用
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计 算机、 打印机、 复印机、 报警器、 电子玩具、 汽车电子设备、 电话机、 定 时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。1.半导体三极管也称为晶体三极管,可以说它是电子电路中最重要的器件。三极管顾名思义具有三个电极。二极管是由一个PN结构成的,而三极管由两个PN结构成,共用的一个电极成为三极管的基极(用字母b表示)。其他的两个电极成为集电极(用字母c表示)和发射极(用字母e表示)。
Java HOOK - 钩子机制扫盲
一、什么是HOOK(钩子) 对于Windows系统,它是建立在事件驱动机制上的,说白了就是整个系统都是通过消息传递实现的。hook(钩子)是一种特殊的消息处理机制,它可以监视系统或者进程中的各种事件消息,截获发往目标窗口的消息并进行处理。所以说,我们可以在系统中自定义钩子,用来监视系统中特定事件发生,完成特定功能,如屏幕取词,监视日志,截获键盘、鼠标输入等等。
lift off工艺为什么常用蒸发的方式镀膜?
电子束蒸发中,蒸发物质从源头直接升华并沿直线路径沉积到晶圆上,它可以避免金属在掩模侧壁的覆盖,只在表面进行沉积。在镀膜结束后,在进行光刻胶剥离时,去胶液无法与光刻胶接触反应,导致光刻胶剥离很困难。欢迎加入我的半导体制造知识星球社区,目前社区有1900人左右。我观察到晶圆厂中lift off工艺,镀膜都是用的电子束蒸发的方式,很少有用磁控溅射的方式,为什么?需要增加撕胶工序,将胶面上覆盖的膜层撕掉,使光刻胶露出,这样才容易剥离。上图为磁控溅射的膜层截面图,去胶液很难突破侧壁膜层,进行反应。
向量数据库安全实战:从Embedding反推到检索越权的全链路防护
随着RAG应用在企业中的普及,向量数据库已成为知识库系统的核心组件。但许多团队对向量数据的安全认知仍停留在传统数据库的账号密码、网络隔离和磁盘加密上。事实上,向量化并非加密,而是一种有损压缩的语义映射,向量本身可以被反推模型还原出原文关键信息,形成高保真的语义泄露通道。同时,相似度检索的模糊匹配特性打破了传统行列权限模型,使得越权检索和成员推断攻击成为新的安全威胁。理解这些原理,有助于企业在数据采集、向量化、索引构建、检索查询等环节构建分层防护体系,包括脱敏、扰动、过滤下推、网关控制等手段。本文从基础概念出
HOOK钩子机制学习笔记(3) - 钩子常用结构体MSDN翻译整理
HOOK钩子机制学习笔记(3) - 钩子常用结构体MSDN翻译整理 收藏 作者:MaybeHelios blog: http://blog.youkuaiyun.com/maybehelios/ 下面是应用Hook时会用到的各种结构。结构1:CBT_CREATEWND Structure The CBT_CREATEWND structure contains
HomeAssistant+HACS实战:5分钟搞定米家设备接入(附HomeKit配置技巧)
本文详细介绍了如何通过HomeAssistant和HACS插件商店快速接入米家设备,并分享HomeKit配置技巧。从HACS安装到米家设备接入,再到HomeKit设备集成,提供一站式智能家居解决方案,帮助用户实现设备统一管理和自动化场景设置。
[Delphi]钩子(HOOK)机制的使用
.style1 { FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #ff6699 } .yjx { BORDER-RIGHT: #f0f0f0 0px solid; BORDER-TOP: #f0f0f0 0px solid; BORDER-LEFT: #f0f0f0 0px solid; BORDER-BOTTOM: #...
【北大核心-代码复现】基于 VMD-FFCM-iTransformer 光伏功率短期预测
【北大核心-代码复现】基于 VMD-FFCM-iTransformer 光伏功率短期预测
Python 爬虫实战:共享单车数据采集全流程与市场洞察深度剖析
本文介绍了如何利用Python爬虫技术获取和分析共享单车运营数据。文章从项目背景出发,详细阐述了系统架构设计,包括数据抓取、清洗存储、分析和可视化模块。通过Scrapy、BeautifulSoup等工具实现数据采集,使用Pandas进行数据清洗,并借助Matplotlib进行可视化分析。实战部分展示了爬虫代码示例和城市分布、使用频率等分析案例。最终指出数据驱动分析有助于了解行业现状和市场趋势,未来可结合机器学习等方法进行深入洞察。该技术方案为共享单车行业研究提供了有效的数据支持。
HOOK钩子机制学习笔记(1)
一、什么是钩子(hook) Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。钩子(hook)是一种特殊的消息处理机制,钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。 钩子的种类很多,
Multisim14使用教程详尽版--(2025最新版)
摘要:本文详细介绍了Multisim14电路仿真软件的功能和使用方法。主要内容包括:1)主流电路仿真软件比较,突出Multisim在教学、竞赛设计中的优势;2)软件界面说明,涵盖菜单栏、工具栏、元器件库和仪器仪表;3)18类元器件分类详解及其使用操作;4)15种仪器仪表的原理和应用场景;5)电路原理图设计与仿真流程;6)基本电路分析方法(直流静态工作点分析、交流分析等)。文章还提供了硬件工程师笔试面试相关资源链接,涵盖电阻、电容、三极管等器件知识及AD软件操作指南。通过系统讲解,帮助用户掌握Multisim
HOOK钩子机制学习笔记
HOOK钩子机制学习笔记(1) 收藏 一、什么是钩子(hook) Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。钩子(hook)是一种特殊的消息处理机制,钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
[转载]Windows HOOK(钩子)机制
Windows系统是以消息处理为其控制机制,系统通过消息为窗口过程(windows procedure)传递输入。系统和应用两者都可以产生消息。对于每个输入事件,例如用户按下了键盘上的某个键、移动了鼠标、单击了一个控件上的滚动条,等等,系统都将产生一系列消息。
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
【WordPress插件开发必学技能】:深入解析Hook钩子机制与实战应用
掌握WordPress插件开发钩子(Hook)机制,轻松实现功能扩展与定制。本文深入解析Action与Filter钩子的适用场景、执行原理及最佳实践,助你高效开发可维护插件。实用技巧与案例结合,值得收藏。
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
HOOK钩子机制
最近在看一些编程相关的书籍和资料,知识碰见了,就想把它记下来,以便日后能用的上,也可能只是浅显的概念!可能有错,但是有值得参考的地方,慢慢充电吧! 一、理解:钩子,顾名思义就是钩东西的,来一个比喻吧。当我们在钓鱼的时候,只要你扔出有诱饵的鱼钩(设置线程钩子或系统钩子),此后你可能会漫长的等待(HOOK等待消息或者信号的来临),但是一旦这条不幸的鱼上钩了(有消息传递,截获住了消息),它就跑不了了,这条鱼就任凭我们处置,我们可以选择放生或者报餐一顿等等(对截获的消息进行处理,调用函数,阻止消息的发
Apache Hook机制解析(下)——实战:在自己的代码中使用Apache的钩子
在前文《Apache Hook机制解析(上)——钩子机制的实现》和《Apache Hook机制解析(中)——细节讨论》的基础上,我们对Apache的钩子机制已经有了较多的了解,下面的代码实战演示了一个日志钩子的声明、定义和使用,在VC6.0上编译测试通过,需要使用APR库(libapr和libaprutils)。 1. hookLog.h——声明一个名为log的钩子 #ifndef __HOOK_
js中的钩子机制(hook)
https://www.2cto.com/kf/201706/649649.html什么是钩子机制?使用钩子机制有什么好处?钩子机制也叫hook机制,或者你可以把它理解成一种匹配机制,就是我们在代码中设置一些钩子,然后程序执行时自动去匹配这些钩子;这样做的好处就是提高了程序的执行效率,减少了if else 的使用同事优化代码结构。由于js是单线程的编程语言,所以程序的运行效率在前端开发是比较重要的...
什么是回调 钩子 Hook机制 钩子函数 异步编程
下面为你分别给出 Java 中回调和 Hook(钩子)机制的示例代码。
1377



被折叠的 条评论
为什么被折叠?



