未知的Windows消息0xC052

时间:2015-09-21 07:57:33

标签: .net winforms message-loop

我正在处理一个问题(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;
    }
}

1 个答案:

答案 0 :(得分:1)

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

.NET Winforms在内部使用它很多次 - 它是一个表现良好的Windows应用程序框架。所以你找到的确切数字可能会对应于:

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

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