0

我有一个从 CWnd 继承的 X 类,我想从应用程序域外部连接到 X Create,即程序 A 必须监视程序 B 中的 X 对象实例化。有没有办法做到这一点?

4

1 回答 1

1
  1. 您无法监视 X (X ctor X::X()) 对象的创建。

  2. 您也无法监控对X::Create.

  3. 但可能有适合您的解决方案:

由于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 回答