2011-07-10 154 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()並在完成後關閉窗口和線程。