Неизвестное сообщение 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).

Другие вопросы по тегам