如何使用SetWindowsHookEx在Windows上挂钩特定的API?

时间:2012-09-13 08:12:54

标签: windows api hook

我试图在Windows上的其他进程(我可能不知道进程ID)中挂起一个API(比如,MessageBox()),我知道我必须使用SetWindowsHookEx()函数。但是,我还有三个问题:

1)SetWindowsHookEx()函数可以使钩子全局化,即不限于当前进程吗? (当应用程序调用此API时,它会被挂钩?)

2)如果我想用自己的函数替换要挂钩的API,我该怎么办?

3)我读了很多材料,发现了“钩子程序”或“钩子功能”这个术语。我该怎么理解这个?目前,我将其作为我将用于替换API的函数(再次说,MessageBox)。

2 个答案:

答案 0 :(得分:3)

这不是SetWindowsHookEx的用途。 SetWindowsHookEx用于挂钩窗口消息,而不是API(例如,如果您想知道窗口何时更改大小或是否已创建)。

挂钩API调用更复杂,更混乱。没有内置的方法可以做到这一点;您通常希望找到一个图书馆来帮助您,例如Detours

答案 1 :(得分:1)

您可以使用Deviare API Hook。使用此库,即使使用.NET,您也可以使用10行代码挂接任何API 与Detours的不同之处在于您不必编写在每个进程中插入的代码。您可以挂钩您想要附加它们的所有进程。然后,您将在自己的流程中接听电话。