DLL中的Windows消息队列处理

时间:2011-07-10 20:37:58

标签: c++ windows dll hotkeys

我有一个由应用程序加载的dll,我无法修改应用程序的源代码(因为我没有源代码),我想用插件注册系统范围的热键。我可以通过类似RegisterHotKey(NULL, 1, MOD_CONTROL | MOD_NOREPEAT, 0x42)的注册热键(参见here)但我不知道如何处理消息队列,我应该创建一个新线程并在dll时创建消息处理循环初始化?我的dll是接收消息的人还是加载dll的应用程序是那个,最后有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

以下是应该如何做的:

  1. 你的DLL创建一个线程
  2. 这个线程运行消息循环(GetMessage()/ DispatchMessage()) - 那种事情。 GetMessage()是你真正需要的,而如果你创建一个窗口需要DispatchMessage()(见下文)
  3. 现在应该发生以下两件事之一:

    • 线程创建一个窗口(可能隐藏)和调用的RegisterHotKey()函数(无论什么线程调用它)并且窗口句柄作为第一个参数传递给它

    OR

    • DLL创建的线程调用RegisterHotKey(),将NULL作为第一个参数传递。

    在此之后,您的消息循环将收到WM_HOTKEY消息。这是执行此操作的官方和首选方式,因此,如果您没有使用支持它的框架(大多数情况下没有),则不会有更好的方法。

    不要忘记调用UnregisterHotKey()并在完成后终止窗口和线程。