Обработка сообщений в консольных приложениях / DLL в C ++ Win32 - PullRequest
4 голосов
/ 25 апреля 2010

Я хотел бы иметь возможность обрабатывать сообщения Win32 в консольном приложении и / или внутри автономной библиотеки DLL.

Я смог сделать это в .NET с помощью следующей статьи, и он прекрасно работает в C # в консольном приложении и автономной DLL
http://msdn.microsoft.com/en-us/magazine/cc163417.aspx

Есть ли способ сделать аналог с Win32 API C / C ++? Я пытался сделать RegisterClassEx (...) и CreateWindow (...), даже передавая HWND_MESSAGE в hWndParent, но проблема в том, что после создания "невидимого" окна сообщения не обрабатываются, вероятно, из-за отсутствия насоса сообщений .

Куда пойдет насос сообщений, если у вас будет точка входа в DLL? Я попытался создать другой поток в DLL и положить туда (GetMesage (..)), но это тоже не сработало.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 13 марта 2011

В дополнение к тому, что сказал Логан Капальдо, у вас также есть проблема, заключающаяся в том, что как DLL вы не знаете во время компиляции, какой процесс будет загружать вас во время выполнения.

  • Если вы загружаетесь консольным приложением (/ SUBSYSTEM: CONSOLE), то создание собственного скрытого окна и настройка рассылки сообщений в том же потоке будет работать нормально (если вы создали первое окно ).
  • Если вы загружаетесь приложением Windows (/ SUBSYSTEM: WINDOWS), у вас могут возникнуть проблемы с получением сообщений. Они будут отправлены в окно верхнего уровня в иерархии, которую вы не создали. Вам нужно получить hWnd основного процесса и создать его подкласс (если вы этого еще не сделали).
  • Если вы загружаетесь службой, вы вообще не будете получать оконные сообщения. Вместо этого вам нужно использовать функцию RegisterServiceCtrlHandlerEx
2 голосов
/ 25 апреля 2010

Вам нужен насос сообщения да. Окно также имеет привязку к потоку, поэтому его нужно создавать в том же потоке, на котором вы запускаете насос сообщений. Основной подход - разумный, если вы добавите больше кода, станет ясно, в чем проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...