【问题标题】:How to lookup obscure windows message codes?如何查找晦涩的 Windows 消息代码?
【发布时间】:2010-02-19 08:52:27
【问题描述】:

我收到一条代码为 1092 (0x444) 的 Windows 消息,但我不知道它是什么。它高于 WM_USER 但我搜索了我们的代码库并没有找到参考,所以我认为它不是我们的... Windows 是否使用高于 0x400 的自定义消息,如果是,我该如何查找?

【问题讨论】:

    标签: mfc winapi


    【解决方案1】:

    来自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

    【讨论】:

    • EM_SETCHARFORMAT。它一定是这个,因为我在看到它之前就调用了 SetFont。非常感谢,更一般的好帖子。
    • @John,很高兴能帮上忙 :)
    【解决方案2】:

    您可以在 Windows 标头中搜索 0x4440x04440x00000444 等字符串。

    它也可能是恶意应用程序发送不应该发送的消息。

    【讨论】:

      【解决方案3】:

      任何应用程序都可以使用高于 WM_USER 或 WM_APP 的消息。 Windows 本身甚至使用高于 WM_USER 的消息。因为任何应用程序都可以广播这些消息值(有些可以,因为它们是由白痴编写的),所以您应该始终将注册消息用于私人通信。

      您可以使用 Spy++ 尝试跟踪这些消息,但不能保证永远停止它们,因此最好使用 RegisterWindowMessage 来避免它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-07
        • 2018-08-10
        • 2016-03-02
        • 1970-01-01
        相关资源
        最近更新 更多