如何在另一个应用程序中挂钩api调用

我试图挂钩另一个应用程序的ExtTextOut和DrawTextExt GDI方法调用。

我知道我需要使用GetProcAddress来查找gdi32.dll中这些方法的地址,并覆盖我想要挂钩我的函数地址的进程中的地址。 然后在我的函数中,我做我需要的,然后调用原始函数。

我想让这个钩子function可用于.net应用程序,显然这可以通过创建一个“中间”非托管dll来实现挂钩,并且能够在.net端触发事件,以便新的function可以在托管环境中下注。 我只是不确定如何实现这一点。 有没有人有任何代码示例或信息链接?

我推荐微软的Detours(仅限C ++ x86)或EasyHook(C ++和C#,x86 / x64)。

http://easyhook.codeplex.com/

我以前用过它,效果很好。 您必须传递一个函数或地址以及您希望将其重定向到的位置,并且您可以将所有调用(针对所有进程或特定进程)发送到您的函数中。 这些教程涵盖了大部分基础知识,但如果您愿意,我可以将代码编辑到这个答案中。

有点琐事是,它也是另一种方式。 传递指向您的函数的指针,您可以将调用重定向到外部代码。 与旧应用程序或闭源应用程序进行一些有趣的集成。

您可以使用Deviare API Hook ,使用DeviareCSharpConsole,它是一个包中的工具,可以挂钩任何API并在类似树视图的控件中查看参数值。 我报告说,Windows7中唯一需要的技巧是以管理员身份加载。

我如何建立一个工作扑克机器人有注入代码和挂钩gdi事件的样本。