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

Jer*_*emy 5 c# hook winapi

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

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

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

ssu*_*ube 5

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

http://easyhook.codeplex.com/

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

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


Yur*_*ich 1

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