windows - 什么是子类化和 API Hook ?

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

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

最佳答案

通俗点说:子类化就是通过替换一个窗口的窗口过程来实现的。它将 Windows 为将消息传递到窗口而进行的调用重定向到您的函数,以便您首先看到这些消息。这使您可以更改窗口的行为,赋予它原始窗口所没有的新功能。这是一种非常常见的技术,直接由操作系统支持,SDK 文章 is here .

API Hook 类似,但适用于 winapi 函数。这样您就可以更改在您的进程中运行但您未编写的代码的行为。您可以任意 Hook CreateFile() 并更改传递的文件名或故意使其失败。这样做不太常见,而且也更难做到正确,因为它不像子类化那样是一种内置功能。 Microsoft's Detours是该技术的示例实现。

这两种技术都属于高级编程类别,如果操作不当,您可能会陷入非常棘手的麻烦。如果您现在无法阅读 MSDN 文章,请将其搁置,直到您准备好阅读为止。

关于windows - 什么是子类化和 API Hook ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10562055/

相关文章:

python - WIN32 程序可以使用 MYSQL 通过 Django 身份验证系统进行身份验证吗?

windows - IntelliJ 可以通过 bash.exe 而不是 Windows cmd.exe 运行 gradle 任务吗?

visual-studio - 我们没有针对 Visual Studio Online 的区域特定数据中心吗

c++ - vector 'no operator "[Visual Studio watch 中的 ]"matches these operands' 错误

c++ - getAsyncKeyState 无法识别键输入

mysql - 桌面应用程序 GUI 设计 - 最佳工具

javascript - 在 Windows 8.1 中禁用调整快照 View 大小

javascript - Cordova Android 应用程序停止事件

c - GDI 单色位图在每次创建 HBITMAP 时翻转位

c++ - 更改标题栏图标时如何正确使用 LoadIcon 和 MAKEINTRESOURCE?