C# 获取活动子窗口
我想检查一个外部应用程序是否打开了定义的子窗口并处于前台 如果我使用winapi检查它,我会得到主窗口的句柄,而不是实际的活动子窗口 我可以通过与标题匹配的所有窗口使用winapi进行枚举,但这只会提供子窗口已打开的信息,但如果子窗口位于前台则不会 如何将两者合并C# 获取活动子窗口,c#,winapi,.net-3.5,C#,Winapi,.net 3.5,我想检查一个外部应用程序是否打开了定义的子窗口并处于前台 如果我使用winapi检查它,我会得到主窗口的句柄,而不是实际的活动子窗口 我可以通过与标题匹配的所有窗口使用winapi进行枚举,但这只会提供子窗口已打开的信息,但如果子窗口位于前台则不会 如何将两者合并 使用GetForegroundWindow查找前景窗口 使用GetWindowThreadProcessId查找拥有该窗口的线程 使用GetGUIThreadInfo查找该线程的GUI信息(活动窗口、焦点窗口、捕获窗口等) 到,活动窗
GetForegroundWindow
查找前景窗口GetWindowThreadProcessId
查找拥有该窗口的线程GetGUIThreadInfo
查找该线程的GUI信息(活动窗口、焦点窗口、捕获窗口等)到,活动窗口始终是顶级窗口(与前景窗口一样)。“实际活动子窗口”不存在。你到底在找什么?此外,这听起来像一个XY问题。你为什么要知道?你是在尝试实现某种脆弱的UI自动化吗?我不认为这些信息对解决这个问题有什么帮助,但你可以这么说:有一个旧的com应用程序,我不允许对它进行任何更改。这就是为什么我需要在定义的控件中跟踪一些输入。这些信息对改进您的问题很有用。如文所述,它要求的是不存在的东西。这些信息也很有用,因为它可以帮助我们阻止您使用方轮汽车。如果要观察/自动化UI,请使用。有了UI自动化,你就不需要你想要的东西了。这有点不同。我将
EnumWindows
与所需的窗口标题一起使用,并调用GetWindowThreadProcessId
检查所有结果句柄是否与GetForegroundWindow的GetWindowThreadProcessId
相等。