我想從加載我的DLL的進程獲取消息。如何安全地從DLL中掛接消息泵?
我已經試過:
SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)WndProc, hInstance, 0);
這給了我錯誤的彈出窗口如何「節目X無法啓動,因爲Y.dll從您的系統中缺少」。這就是我在標題中「安全」放置的原因。
我也試過:
SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)WndProc, hInstance, threadId);
凡threadId
是在我的DLLMain GetCurrentThreadId()
結果。 這一個工程,但我沒有得到任何消息的窗口(只是一堆512和1025)。
謝謝,這回答了我很多問題。我正在使用需要'hwnd'傳遞消息的wintab庫。線程是否有層次結構,我可以爬上去找到最近的窗口,或者在我的DLL中創建一個隱藏的窗口? –
如果你正在做一個窗口句柄這個複雜的東西,那麼肯定不會鉤住某人的財產。創建你自己的。但請注意,您的窗口必須位於具有消息循環的線程上。所以,如果你足夠幸運,你只需創建一個窗口;否則你需要創建一個帶窗口的後臺線程和一個消息循環。無論如何,這兩種方法都更容易,更可靠。 –