См. Раздел «Использование сообщений и очередей сообщений» в MSDN (в разделе «Разработка для Win32 и COM»> «Интерфейс пользователя»> «Работа с Windows»> «Управление Windows»> «Интерфейс пользователя Windows»> «Работа с окнами»> «Сообщения и очереди сообщений»). посмотрите на другие статьи и образцы в том же разделе). Краткое резюме, исключая обработку ошибок и используя синтаксис C вместо C # по причинам, обсуждаемым ниже:
RegisterClass(...);
CreateWindow(...);
ShowWindow(...); // probably not in your case
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Как видно из шаблона настройки окна, он по-прежнему опирается на «тихие окна», хотя и создаваемые и прокачиваемые сообщениями через Win32 API, а не через WinForms. Таким образом, вы действительно ничего не получаете, поступая таким образом. Поэтому я чувствую, что нет смысла переводить этот материал на C # - если единственным решением вашей проблемы является невидимое окно, вы также можете использовать невидимую форму Windows и все дружественные оболочки, которые поставляются с этой платформой.
Однако, если вы на самом деле не используете элемент управления Windows Forms, такой как плакат связанного вопроса, тогда вы вполне можете использовать события .NET в консольном приложении. Ограничение в отношении STA и необходимость в прокачке сообщений характерны для получения событий от WinForms и элементов управления ActiveX, таких как WebBrowser (или сообщений от Win32 HWND, хотя для этого необязательно требуется STA).