我想从加载我的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中创建一个隐藏的窗口? –
如果你正在做一个窗口句柄这个复杂的东西,那么肯定不会钩住某人的财产。创建你自己的。但请注意,您的窗口必须位于具有消息循环的线程上。所以,如果你足够幸运,你只需创建一个窗口;否则你需要创建一个带窗口的后台线程和一个消息循环。无论如何,这两种方法都更容易,更可靠。 –