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

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

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

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

3)我读了很多资料,并find了“钩子程序”或“钩子函数”这个词。 我应该如何理解这一点? 目前,我把它作为我将用来replaceAPI的函数(再说一次,MessageBox)。

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

挂接API调用更复杂,更杂乱。 没有固定的方法去做; 你通常想找一个图书馆来帮助你,例如Detours 。

你可以使用Deviare API钩子 。 有了这个库,你甚至可以使用.NET连接10行代码中的任何API。与Detours的不同之处在于,你不必编写每个进程中插入的代码。 你可以钩住你想要附加的所有进程。 然后,你在自己的过程中收到电话。