2010-08-12 37 views
5

我试图挂钩另一个应用程序的ExtTextOut和DrawTextExt GDI方法调用。如何在另一个应用程序中挂接api调用

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

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

回答

5

我会推荐Microsoft's Detours(仅限C++ x86)或EasyHook(C++ & C#,x86/x64)。

http://easyhook.codeplex.com/

我以前用过它

,工作得很好。您必须传递函数或地址,并将其重定向到的位置,并且您可以将所有呼叫(针对所有流程或特定流程)发送到您的函数中。本教程涵盖了大部分基础知识,但如果需要,我可以将代码编辑到此答案中。

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

+0

FWIW专业版的Detours支持ia/x64 – 2010-08-12 10:21:37

+0

EasyHook对我来说听起来更好,因为它完全可以免费使用(可以做64位)......是否有某种教程可以通过获取小样本来运行?我在文档部分看不到任何内容。 – Jeremy 2010-08-12 15:11:20

+0

它隐藏在下载页面上:http://easyhook.codeplex.com/releases/view/24401 托管API文档,教程和介绍。不是最棒的教程,但它们应该足以让你开始。 :) – ssube 2010-08-13 03:17:11

4

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

+0

非常酷。也免费。 – Jeremy 2010-11-14 04:44:26

相关问题