如何在Delphi中设置系统范围的API挂钩?

如何在Delphi中设置系统范围的API挂钩?,delphi,winapi,hook,api-hook,Delphi,Winapi,Hook,Api Hook,有人知道系统范围的API与Delphi挂钩吗 我下载了madCodeHook,但它没有任何来源,所以我不想使用它;我想自己编程 我发现了,但是它是C++的。请帮助我在Delphi2010中编写它。您必须使用钩子过程(全局:整个系统;或局部:单个程序或线程) 基本上,您将调用以下过程: SetWindowsHookEx功能:安装挂钩(监控系统事件) 钩子函数:当我们“钩子”到的事件发生时,windows将调用该过程 UnhookWindowsHookEx函数:移除钩子 下面是本地钩子监视键盘条

有人知道系统范围的API与Delphi挂钩吗

我下载了madCodeHook,但它没有任何来源,所以我不想使用它;我想自己编程


我发现了,但是它是C++的。请帮助我在Delphi2010中编写它。

您必须使用钩子过程(全局:整个系统;或局部:单个程序或线程)

基本上,您将调用以下过程:

  • SetWindowsHookEx功能:安装挂钩(监控系统事件)
  • 钩子函数:当我们“钩子”到的事件发生时,windows将调用该过程
  • UnhookWindowsHookEx函数:移除钩子
下面是本地钩子监视键盘条目的简单示例:

//setting up the hook;
//kbHook is a variable of type HHook (unit Windows);
//kbr_Hook is the procedure that will be called once the event happens;
kbHook:=setwindowshookex(WH_KEYBOARD,@kbr_Hook,0,GetCurrentThreadID()); 
MSDN文档:


祝你好运

@Phoenix,你可以试试这个库,它是用delphi 7编写的(我在delphi 2007中进行了测试,它工作正常),并附带了一组示例,可以从下载和完整下载。唯一的缺点是自2006年7月7日以来一直没有更新,但就我个人而言,即使在Windows 7上,我也测试过这个库,它工作正常。

madCodeHook如果你购买它,肯定会附带源代码。但是@TOndrej,他想自己编写。350欧元对于你根本不打算使用的代码来说是相当昂贵的。而且madCodeHook的作者不会出于安全考虑把代码给任何人。如果你买了,如果你没有得到代码。你必须额外购买它,并证明你会出于善意使用它。至少两年前是这样。@Rob:我把“它没有任何源代码,所以我不想使用它”理解为“我不想使用它,因为没有源代码”。我只是想证明“它没有任何来源”的假设是错误的。有些人可能会认为这是不完整的,因为菲尼克斯基本上要求“源代码”,但这并不能使这个答案错。问题是关于API挂钩,而不是挂钩API。挂接API是将代码(DLL)加载到其他进程的几种可能方法之一,这是必需的步骤之一,但它并不能解决API挂接(拦截API调用)问题。Mo3ez为自己辩护,Phoenix确实用
setwindowshookex
标记了这个问题。我收集了所有的api,但它只获取了本地api挂钩。我想在系统进程中插入一个dll(跨系统的钩子Api函数)