Как зарегистрировать WndProc в консольном приложении

Для обработки сообщений это можно сделать в WinForms, но можно ли организовать WndProc не прибегая формы?
Как реализовать его в консольном приложение?


Ответы (1 шт):

Автор решения: Rudnight

Нашёл решение, сделал так, по другому не получается!
Мне нужно было сделать просмотр подключения и отключение usb флешек в консоли.

public class Program : Form
{
  [STAThread]
  public static void Main(string[] args)
  {
     Application.Run(new Program());
  }

  protected override void WndProc(ref Message m)
  {
     int WM_DEVICECHANGE = 537;
     IntPtr flashOut = (IntPtr)32772;
     IntPtr flashIn = (IntPtr)32768;

     if (m.Msg == WM_DEVICECHANGE)
     {
        Console.WriteLine($"Изменение устройства {m.WParam} - {m.LParam}\r\n");
        if (m.WParam == flashIn)
        {
            Console.WriteLine("Обнаружена флешка ");
        }

        if (m.WParam == flashOut)
        {
            Console.WriteLine("Флешка извлечена");
        }
      }
      base.WndProc(ref m);
  }
}
→ Ссылка