我试图挂钩另一个应用程序的ExtTextOut和DrawTextExt GDI方法调用.
我知道我需要使用GetProcAddress在gdi32.dll中查找这些方法的地址,并在我想要挂钩我的函数地址的过程中覆盖地址.然后在我的函数中,我做我需要的,然后调用原始函数.
我想让这个钩子功能可用于.net应用程序,显然这可以通过创建一个"中间"非托管dll来执行挂钩,并且能够在.net端触发事件,以便新的功能可以写在托管环境中.我只是不确定如何实现这一点.有没有人有任何代码示例或信息链接?
我推荐微软的Detours(仅限C++ x86)或EasyHook(C++和C#,x86/x64).
我以前用过它,效果很好.您必须传递一个函数或地址以及您希望将其重定向到的位置,并且您可以将所有调用(针对所有进程或特定进程)发送到您的函数中.这些教程涵盖了大部分基础知识,但如果您愿意,我可以将代码编辑到这个答案中.
有点琐事是,它也是另一种方式.传递指向您的函数的指针,您可以将调用重定向到外部代码.与旧应用程序或闭源应用程序进行一些有趣的集成.