【问题标题】:Unknown Windows Message 0xC052未知的 Windows 消息 0xC052
【发布时间】:2015-09-21 07:57:33
【问题描述】:

我正在解决一个问题 (How to Detect a form open inside the application),偶然发现一条我无法理解的 Windows 消息:0xC052。

这是我在表单打开时在 MessageFilter 中收到的第一条消息。但由于我没有找到任何参考资料,我不想依赖这样的假设,即消息告诉我表单已打开是可靠的。

编辑:添加代码

Application.AddMessageFilter(new MessageFilterImpl());

class MessageFilterImpl : IMessageFilter
{
    public bool PreFilterMessage(ref Message m)
    {
        Control wnd = Form.FromHandle(m.HWnd);
        if (wnd is Form)
            knownForms.Add((Form)wnd); //m.Msg is 0xC052

        return false;
    }
}

【问题讨论】:

  • 这听起来像是从您安装的另一个应用程序广播的内容 - 这不是标准消息。无论如何,我认为您正在寻找的是Load 事件。
  • 谢谢。但是要向Load-event 添加事件处理程序,我首先需要知道form,这是最初的问题。
  • 它可以是任何字符的Unicode。
  • 为什么unicode-character应该是message-loop中的message-code?​​span>

标签: .net winforms message-loop


【解决方案1】:

假设这是一个格式良好的 Windows 消息,它是从 RegisterWindowMessage 函数返回的动态分配的 ID(注意范围 0xC000-0xFFFF)。当您需要定义一个应该是系统唯一的新窗口消息时使用该函数。换句话说,您不能依赖 ID - 下次重启时会有所不同。

.NET Winforms 在内部多次使用它——它是一个表现良好的 Windows 应用程序框架。因此,您找到的确切数字可能对应于以下内容:

  • 线程回调(Invoke 和朋友)
  • 鼠标输入消息
  • 获取控件名称 (Name)

当然,它甚至不必是 .NET 消息 - 例如,您的系统上可能有一些应用程序可以将消息广播到所有表单。这是处理 RPC 的常用方法(在我的例子中,收到的表单,例如 MSUIM.Msg.RpcSendReceive)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2020-11-24
    • 2018-08-07
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    相关资源
    最近更新 更多