我有一个从 CWnd 继承的 X 类,我想从应用程序域外部连接到 X Create,即程序 A 必须监视程序 B 中的 X 对象实例化。有没有办法做到这一点?
问问题
253 次
1 回答
1
您无法监视 X (X ctor
X::X()
) 对象的创建。您也无法监控对
X::Create
.但可能有适合您的解决方案:
由于X::Create
调用CWnd::Create
并创建了一个窗口,因此您可以连接到窗口创建,并且可能能够检测到何时创建了 X 的窗口。但是,只有在创建的窗口有一些特殊之处(例如用于创建它们的已知窗口类)时,您才能认识到这一点。如果是这种情况,那么:
您在之前的问题中已经得到了正确的答案Hooking window creation in an MFC program。
您可以使用SetWindowsHookEx (WH_CBT, lpfn, hMod, dwThreadId) 在创建窗口时获得通知。
需要记住的一些事项:
- 挂钩函数必须驻留在 DLL 中,而不是在调用
SetWindowsHookEx
. 这是因为 windows 会将您的 DLL 加载/注入到它监视的每个进程中以创建窗口。 - 如果要监控 32 位进程,则需要 32 位进程和 DLL。
- 如果要监控 64 位进程,则需要 64 位进程和 DLL。
- 如果要监控 32 位和 64 位进程,则需要 32 位和 64 位进程和 DLL。
- 您的进程必须是 Windows 应用程序,而不是控制台应用程序,并且它必须不断发送消息。
- 如果您知道线程 ID,则可以将其传递给 SetWindowsHookEx。如果没有,您可以传递 0,您将收到同一桌面上所有窗口的通知。
- 小心你在钩子函数中所做的事情,不要忘记调用
CallNextHookEx
. - 您将收到有关不同窗口上不同事件的通知,并且您必须过滤掉 nCode==
HCBT_CREATEWND
和您感兴趣的窗口类(或其他)。
于 2013-07-16T07:28:00.293 回答