Неизвестное сообщение Windows 0xC052
Я работаю над проблемой ( Как определить форму, открытую внутри приложения) и наткнулся на сообщение 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 ответ
Предполагая, что это правильно сформированное сообщение Windows, это динамически распределяемый идентификатор, возвращаемый функцией RegisterWindowMessage (обратите внимание на диапазон 0xC000-0xFFFF
). Эта функция используется, когда вам нужно определить новое сообщение Windows, которое должно быть уникальным для системы. Другими словами, вы не можете полагаться на идентификатор - он будет другим при следующей перезагрузке.
.NET Winforms использует его внутри себя много раз - это хорошо работающая среда приложений Windows. Таким образом, точное число, которое вы нашли, может предположительно соответствовать чему-то вроде:
- Обратный вызов потока (
Invoke
и друзья) - Мышь введите сообщение
- Получить контрольное имя (
Name
)
И, конечно, это даже не должно быть сообщение.NET - в вашей системе может быть приложение, которое, например, передает сообщения всем формам. Это распространенный способ обработки RPC (в моем случае MSUIM.Msg.RpcSendReceive
).