使用Win32 API挂钩获取新创建的窗口

时间:2010-05-19 01:33:46

标签: c# .net winapi hook

这可能是一个很长的时间或甚至不可能,但在询问时没有任何伤害。

我要做的是监视它在MDI控件中创建的任何新窗口的应用程序。我已经在C#中实现了挂钩并且可以捕获MDICREATE窗口消息但是因为我需要在创建之后获取有关窗口的信息,所以MDICREATE消息没有多大帮助,因为在那个阶段窗口还没有在另一个中创建申请。

如果不详细说明,我只需要能够看到创建新窗口的时间。

这可能吗?

由于

3 个答案:

答案 0 :(得分:1)

我不知道另一条消息可以获取您正在寻找的信息。但是,如果该消息对您有效,您可以挂钩该消息,然后再对窗口进行扫描以找到您缺少的消息。您可以枚举父窗口的子窗口。使用Spy ++查看确切的窗口层次结构。

答案 1 :(得分:0)

如果您可以观看特定的函数调用,我会使用某种挂钩库来抓住它(EasyHook浮现在脑海中)。

你可以挂钩MDI创建函数(假设有一个),注意它,然后在你的代码中,调用原始函数并使用返回值进行任何查找。您可以访问返回的值和任何参数,因此您应该可以从中获取一些信息。

答案 2 :(得分:0)

我的两个选项。

  1. 挂钩WM_MDIACTIVATE事件,第一次激活窗口时,使用标志来确定窗口第一次被激活。

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