Обработка очереди сообщений Windows в DLL - PullRequest
2 голосов
/ 11 июля 2011

У меня есть dll, которая загружается приложением, я не могу изменить источник приложения (поскольку у меня нет источника), и я хочу зарегистрировать общесистемную горячую клавишу с плагином.Я могу зарегистрировать горячую клавишу через что-то вроде RegisterHotKey(NULL, 1, MOD_CONTROL | MOD_NOREPEAT, 0x42) (см. здесь ), но я не уверен, как мне следует обрабатывать очередь сообщений, если я создам новый поток и создаю цикл обработки сообщений, когда DLLинициализирует?Будет ли мой dll получать сообщения или будет приложение, загрузившее dll, и, наконец, есть ли лучший способ сделать это?

1 Ответ

3 голосов
/ 11 июля 2011

Вот как это должно быть сделано:

  1. ваша DLL создает поток
  2. этот поток запускает цикл сообщений (GetMessage () / DispatchMessage ()) - такого рода вещи. GetMessage () - это то, что вам действительно нужно, тогда как DispatchMessage () необходимо, если вы создаете окно (см. Ниже)

Теперь должно произойти одно из двух:

  • поток создает окно (возможно, скрытое) и функцию RegisterHotKey () в вызываемой (не имеет значения, какой поток его вызывает), и дескриптор окна передается ему в качестве первого аргумента

OR

  • поток, созданный DLL, вызывает RegisterHotKey (), передавая NULL в качестве первого аргумента.

После всего этого ваш цикл сообщений будет получать сообщения WM_HOTKEY. Это официальный и предпочтительный способ сделать это, так что нет, нет лучшего способа сделать это, если вы не используете фреймворк, который поддерживает его для вас (большинство этого не делают).

Не забудьте вызвать UnregisterHotKey () и убить окно и поток, когда вы закончите.

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