2

我正在尝试在 Windows 上的其他进程(我可能不知道进程 ID)中挂钩 API(例如 MessageBox()),我知道我必须使用 SetWindowsHookEx() 函数。但是,我仍然有三个问题:

1) SetWindowsHookEx() 函数能否使钩子成为全局的,即不限于当前进程?(当他们的应用程序调用这个 API 时,它被钩住了吗?)

2)如果我想用自己的函数替换被钩的API,我应该怎么做?

3)看了很多资料,找到了“hook procedure”或者“hook function”这个词。我该如何理解这一点?目前,我将它作为我将用来替换 API 的函数(再说一次,MessageBox)。

4

2 回答 2

3

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

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

于 2012-09-13T08:38:20.180 回答
1

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

于 2012-09-13T14:28:10.897 回答