2011-07-10 205 views
2

我有一个由应用程序加载的dll,我无法修改应用程序的源代码(因为我没有源代码),我想用插件注册系统范围的热键。我可以通过如RegisterHotKey(NULL, 1, MOD_CONTROL | MOD_NOREPEAT, 0x42)(请参阅here)注册热键,但我不确定应该如何处理消息队列,我应该在dll初始化时创建一个新线程并创建消息处理循环?我的dll会成为收到这些消息的人吗?还是将加载dll的应用程序作为唯一的,最后是否有更好的方法来执行此操作?DLL中的Windows消息队列处理

回答

3

下面是它应该怎么做:

  1. 您的DLL创建一个线程
  2. 这个线程运行的消息循环(GetMessage函数()/ DispatchMessage函数()) - 之类的事情。的GetMessage()是你真正需要的,而如果你创建一个窗口,需要在DispatchMessage()(见下文)

的两件事情现在应该发生:

  • 的线程创建的窗口(隐藏,也许)和RegisterHotKey()函数调用(什么都无所谓线程调用它)和窗口句柄传递给它的第一个参数

OR

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

毕竟这个消息循环会收到WM_HOTKEY消息。这是做这件事的官方和首选方式,所以不,如果你没有使用支持它的框架(大多数不这样做),没有更好的方法来做到这一点。

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

相关问题