我正在尝试挂接另一个应用程序的ExtTextOut和DrawTextExt GDI方法调用。
我知道我需要使用GetProcAddress在gdi32.dll中查找这些方法的地址,并在我想要挂钩我的函数地址的过程中覆盖地址。然后在我的函数中,我做我需要的,然后调用原始函数。
我想让这个钩子功能可用于.net应用程序,显然这可以通过创建一个“中间”非托管dll来实现挂钩,并且能够在.net端触发事件,所以新功能可以写在托管环境中。我只是不确定如何实现这一点。有没有人有任何代码示例或信息链接?
答案 0 :(得分:5)
我会推荐微软的Detours(仅限C ++ x86)或EasyHook(C ++& C#,x86 / x64)。
我以前用过它,效果很好。您必须传递函数或地址以及您希望将其重定向到的位置,并且您可以将所有调用(针对所有进程或特定进程)发送到您的函数中。这些教程涵盖了大部分基础知识,但如果您愿意,我可以将代码编辑到这个答案中。
有点琐事是,它也是另一种方式。传递指向您的函数的指针,您可以将调用重定向到外部代码。与旧应用程序或闭源应用程序进行一些有趣的集成。
答案 1 :(得分:4)
您可以使用Deviare API Hook,使用DeviareCSharpConsole,它是一个工具包,允许您挂钩任何API并在类似树视图的控件中查看参数值。 我报告说,Windows7中唯一需要的技巧是以管理员身份加载。
答案 2 :(得分:1)
How I Built a Working Poker Bot包含注入代码和挂钩gdi事件的示例。