C# 获取活动子窗口

C# 获取活动子窗口,c#,winapi,.net-3.5,C#,Winapi,.net 3.5,我想检查一个外部应用程序是否打开了定义的子窗口并处于前台 如果我使用winapi检查它,我会得到主窗口的句柄,而不是实际的活动子窗口 我可以通过与标题匹配的所有窗口使用winapi进行枚举,但这只会提供子窗口已打开的信息,但如果子窗口位于前台则不会 如何将两者合并 使用GetForegroundWindow查找前景窗口 使用GetWindowThreadProcessId查找拥有该窗口的线程 使用GetGUIThreadInfo查找该线程的GUI信息(活动窗口、焦点窗口、捕获窗口等) 到,活动窗

我想检查一个外部应用程序是否打开了定义的子窗口并处于前台

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

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

如何将两者合并

  • 使用
    GetForegroundWindow
    查找前景窗口
  • 使用
    GetWindowThreadProcessId
    查找拥有该窗口的线程
  • 使用
    GetGUIThreadInfo
    查找该线程的GUI信息(活动窗口、焦点窗口、捕获窗口等)

  • 到,活动窗口始终是顶级窗口(与前景窗口一样)。“实际活动子窗口”不存在。你到底在找什么?此外,这听起来像一个XY问题。你为什么要知道?你是在尝试实现某种脆弱的UI自动化吗?我不认为这些信息对解决这个问题有什么帮助,但你可以这么说:有一个旧的com应用程序,我不允许对它进行任何更改。这就是为什么我需要在定义的控件中跟踪一些输入。这些信息对改进您的问题很有用。如文所述,它要求的是不存在的东西。这些信息也很有用,因为它可以帮助我们阻止您使用方轮汽车。如果要观察/自动化UI,请使用。有了UI自动化,你就不需要你想要的东西了。这有点不同。我将
    EnumWindows
    与所需的窗口标题一起使用,并调用
    GetWindowThreadProcessId
    检查所有结果句柄是否与
    GetForegroundWindow的
    GetWindowThreadProcessId
    相等。