【问题标题】:Get Active Subwindow获取活动子窗口
【发布时间】:2015-12-03 12:35:25
【问题描述】:

如果定义的子窗口已打开并在前台,我想检查外部应用程序。

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

我可以通过与标题匹配的所有窗口使用 winapi EnumWindows 进行枚举,但这只会提供子窗口已打开的信息,但如果它在前台则不会。

如何合并两者?

【问题讨论】:

  • 通过definition,活动窗口始终是顶级窗口(就像前台窗口一样)。 “实际的活动子窗口” 不存在。你真正在寻找什么?此外,这听起来像是一个 XY 问题。为什么你需要知道?您是否正在尝试实现某种脆弱的 UI 自动化?
  • 我看不出这些信息对解决问题有什么帮助,但你去吧:有一个旧的 com 应用程序,我不允许对其进行更改。这就是为什么我需要在定义的控件中跟踪一些输入。
  • 该信息有助于改进您的问题。正如所写,它要求的是不存在的东西。该信息也很有用,因为它可以帮助我们防止您使用方形轮子的汽车。如果您想观察/自动化 UI,请使用 UI Automation。使用 UI 自动化,您不需要想要的东西。

标签: c# winapi .net-3.5


【解决方案1】:
  1. 使用GetForegroundWindow 查找前景窗口。
  2. 使用GetWindowThreadProcessId 查找拥有该窗口的线程。
  3. 使用GetGUIThreadInfo 查找该线程的 GUI 信息(活动窗口、焦点窗口、捕获窗口等)。

【讨论】:

  • 是不是有点不一样。我将EnumWindows 与我想要的窗口标题一起使用,并调用GetWindowThreadProcessId 来检查所有结果句柄是否与GetWindowThreadProcessIdGetWindowThreadProcessId 相等。
猜你喜欢
  • 2012-10-29
  • 2011-01-05
  • 2018-02-10
  • 2018-08-10
  • 2012-05-03
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多