未知 Windows 消息 0xC052
Unknown Windows Message 0xC052
我正在处理一个问题 (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;
}
}
假设这是一个格式正确的 windows 消息,它是一个从 RegisterWindowMessage 函数返回的动态分配的 ID(注意范围 0xC000-0xFFFF
)。当您需要定义一个应该是系统唯一的新 windows 消息时,将使用该函数。换句话说,您不能依赖 ID - 下次您重新启动时它会有所不同。
.NET Winforms 在内部多次使用它 - 它是一个表现良好的 windows 应用程序框架。所以你找到的确切数字可能对应于这样的东西:
- 线程回调(
Invoke
和朋友)
- 鼠标输入消息
- 获取控件名称(
Name
)
当然,它甚至不必是 .NET 消息 - 例如,您的系统上可能有一些应用程序可以将消息广播到所有表单。这是处理 RPC 的常用方法(在我的例子中,收到的表单,例如 MSUIM.Msg.RpcSendReceive
)。
我正在处理一个问题 (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;
}
}
假设这是一个格式正确的 windows 消息,它是一个从 RegisterWindowMessage 函数返回的动态分配的 ID(注意范围 0xC000-0xFFFF
)。当您需要定义一个应该是系统唯一的新 windows 消息时,将使用该函数。换句话说,您不能依赖 ID - 下次您重新启动时它会有所不同。
.NET Winforms 在内部多次使用它 - 它是一个表现良好的 windows 应用程序框架。所以你找到的确切数字可能对应于这样的东西:
- 线程回调(
Invoke
和朋友) - 鼠标输入消息
- 获取控件名称(
Name
)
当然,它甚至不必是 .NET 消息 - 例如,您的系统上可能有一些应用程序可以将消息广播到所有表单。这是处理 RPC 的常用方法(在我的例子中,收到的表单,例如 MSUIM.Msg.RpcSendReceive
)。