2015-12-03 140 views
0

如果定义的子窗口打开并处于前台,我想检查外国应用程序。获取活动子窗口

如果我使用winapi GetForegroundWindow进行检查,我会得到主窗口的句柄,而不是实际的活动子窗口。

我可以通过与标题匹配的所有窗口来枚举winapi EnumWindows,但是这只会提供信息,即子窗口是打开的,但如果它处于前景中则不会。

如何合并两个东西?

+0

[定义](https://msdn.microsoft.com/en-us/library/windows/desktop/ms632599.aspx),活动窗口始终是顶层窗口(就像前景一样窗口)。 *“实际活动的子窗口”*不是存在的。你真的在找什么?此外,这听起来像是一个XY问题。你为什么需要知道?你是否试图实施某种脆弱的UI自动化? – IInspectable

+0

我不明白这些信息对解决这个问题有什么帮助,但是在这里你可以看到: 有一个旧的com应用程序,我不允许改变一下。这就是为什么我需要在定义的控件中追踪一些输入。 – isHuman

+0

该信息对于改善您的问题非常有用。正如所写,它要求的东西不存在。这些信息也很有用,因为它可以帮助我们避免使用带方形车轮的汽车。如果要观察/自动化UI,请使用[UI自动化](https://msdn.microsoft.com/en-us/library/ms747327.aspx)。使用UI Automation,您不需要您想要的东西。 – IInspectable

回答

0
  1. GetForegroundWindow找到前景窗口。
  2. GetWindowThreadProcessId查找拥有该窗口的主题。
  3. GetGUIThreadInfo找到该线程的GUI信息(活动窗口,焦点窗口,捕获窗口等)。
+0

它有点不同。我对所需的窗口标题使用了'EnumWindows',并为所有生成的句柄调用'GetWindowThreadProcessId',检查'GetForegroundWindow'的'GetWindowThreadProcessId'是否相等。 – isHuman