【问题标题】:What is Subclassing and API Hooking?什么是子类化和 API 挂钩?
【发布时间】:2012-05-20 16:21:28
【问题描述】:

我对 Windows API 编程相当陌生,我想通俗地了解什么是子类化和 API Hooking。我正在做一个使用所有者绘制控件的项目,并且我的两个术语不断出现。现在我已经在 CodeProject.com 上看到了很多关于这些主题的详细教程,但问题是它们都使用 MFC,而我是在纯 Win32 中编码。如果有人知道上述主题的任何好的教程,请发布链接。还要尽量避免链接到 msdn,因为新手我很难理解那里写的内容。

【问题讨论】:

    标签: windows visual-studio winapi visual-c++


    【解决方案1】:

    外行术语:子类化是通过替换窗口的窗口过程来完成的。它将 Windows 为将消息传递到窗口的调用重定向到您的函数,以便您首先看到这些消息。这使您可以更改窗口的行为,为其提供原始窗口所没有的新功能。这是一种很常见的技术,直接被操作系统支持,SDK 文章is here

    API 挂钩与 winapi 函数类似。这样您就可以更改在您未编写的进程中运行的代码的行为。任意地,您可以挂钩 CreateFile() 并更改传递的文件名或故意使其失败。这样做要少得多,而且要正确处理也更加困难,因为它不像子类化那样是一种内置的能力。 Microsoft's Detours 是该技术的一个示例实现。

    这两种技术都属于高级编程类别,如果你做得不对,你可能会陷入非常糟糕的麻烦。如果您现在无法阅读 MSDN 文章,请将其放在书架上,直到您准备好为止。

    【讨论】:

    • 谢谢。我很抱歉这么直率,只是我是这种编程的新手,说实话我对这种复杂的编程有点不知所措。再次感谢您提供的信息。
    【解决方案2】:

    如果您正在编程原始 Win32,您可能应该阅读 Petzold 的书“Programming Windows”。

    【讨论】:

    • 是否有该书名的电子书可供下载?
    • 是的,看看亚马逊,你可以在 Kindle 上买到它(大概包括适用于 Windows 的 Kindle 应用程序)。然而,汉斯的建议是好的。此外,如果您只想编写一个在 Windows 上运行的程序,请考虑使用 C#。
    猜你喜欢
    • 2019-06-07
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2011-08-21
    相关资源
    最近更新 更多