【发布时间】:2010-02-19 08:52:27
【问题描述】:
我收到一条代码为 1092 (0x444) 的 Windows 消息,但我不知道它是什么。它高于 WM_USER 但我搜索了我们的代码库并没有找到参考,所以我认为它不是我们的... Windows 是否使用高于 0x400 的自定义消息,如果是,我该如何查找?
【问题讨论】:
我收到一条代码为 1092 (0x444) 的 Windows 消息,但我不知道它是什么。它高于 WM_USER 但我搜索了我们的代码库并没有找到参考,所以我认为它不是我们的... Windows 是否使用高于 0x400 的自定义消息,如果是,我该如何查找?
【问题讨论】:
来自WM_USER的文档:
第二个范围内的消息编号 (WM_USER 到 0x7FFF) 可以 由应用程序定义和使用 在私人窗口中发送消息 班级。这些值不能用于 定义有意义的消息 在整个应用程序中,因为 一些预定义的窗口类已经 定义此范围内的值。 为 例如,预定义的控制类 例如按钮、编辑、列表框和 COMBOBOX 可以使用这些值。 此范围内的消息不应 发送到其他应用程序,除非 应用程序被设计成 交换消息并附上 消息编号的含义相同。
因此,该消息可以是任何内容。
例如,快速查看 MFC 源代码会发现这些定义
// COMMCTRL.H
#define TB_ADDBUTTONSW (WM_USER + 68)
// RICHEDIT.H
#define EM_SETCHARFORMAT (WM_USER + 68)
我搜索了68,因为0x444 = 0x400 + 0x44 = WM_USER + 68
【讨论】:
您可以在 Windows 标头中搜索 0x444、0x0444、0x00000444 等字符串。
它也可能是恶意应用程序发送不应该发送的消息。
【讨论】:
任何应用程序都可以使用高于 WM_USER 或 WM_APP 的消息。 Windows 本身甚至使用高于 WM_USER 的消息。因为任何应用程序都可以广播这些消息值(有些可以,因为它们是由白痴编写的),所以您应该始终将注册消息用于私人通信。
您可以使用 Spy++ 尝试跟踪这些消息,但不能保证永远停止它们,因此最好使用 RegisterWindowMessage 来避免它们。
【讨论】: