代码之家  ›  专栏  ›  技术社区  ›  Nathan W

使用win32 api钩子获取新创建的窗口

  •  0
  • Nathan W  · 技术社区  · 15 年前

    这可能是一个长短不一的问题,甚至不可能,但问起来没有坏处。

    我要做的是监视应用程序在MDI控件中创建的任何新窗口。我已经在c中实现了钩住,并且可以捕获mdicreate窗口消息,但是由于我需要在创建窗口后获取有关该窗口的信息,mdicreate消息没有太大帮助,因为在该阶段,窗口尚未在其他应用程序中创建。

    不需要太多的细节,我只需要能够看到一个新的窗口何时已经创建。

    这可能吗?

    谢谢

    3 回复  |  直到 15 年前
        1
  •  1
  •   Brian R. Bondy    15 年前

    我不知道还有什么消息能让你马上得到你想要的信息。但是,如果该消息对您有效,则可以挂接该消息,然后对窗口进行另一次扫描,以找到丢失的消息。可以枚举父窗口的子窗口。使用spy++查看确切的窗口层次结构。

        2
  •  0
  •   ssube    15 年前

    如果你能注意到一个特定的函数调用,我会使用某种挂钩库来获取它(我想到了easyhook)。

    您可以挂接mdi create函数(假设有一个),观察它,然后在代码中调用原始函数并使用返回值进行任何查找。您将有权访问返回值和任何参数,因此您应该能够从中获取一些信息。

        3
  •  0
  •   Chris Taylor    15 年前

    我脑子里有两个选择。

    1. 钩住wm_mdiactivate事件,第一次激活窗口时,使用标志确定第一次激活窗口的时间。

    2. 如果需要在wm_mdicreate或wm_mdiactivate之后运行代码,则可以从这些消息中的一个发送新的自定义消息,然后在这些消息完成后进行处理。然后编写代码来处理自定义消息。