C# 虽然inspect.exe显示所有子窗口,但只找到一个子窗口

C# 虽然inspect.exe显示所有子窗口,但只找到一个子窗口,c#,ui-automation,C#,Ui Automation,我在使用C#UIAutomation查找Firefox的UI元素时遇到问题 在Inspect.exe中,一切看起来都正常: 但是,当在窗口上使用下面的方法作为根时,只会找到高亮显示为黄色的元素。我需要找到蓝色元素,但一直没能找到。以下解决方案基于此帖子: 公共静态元素(AutomationElement根元素) { if(rootElement==null)返回; var children=新列表(); var currentChild=TreeWalker.RawViewWalker.Ge

我在使用C#UIAutomation查找Firefox的UI元素时遇到问题

在Inspect.exe中,一切看起来都正常:

但是,当在窗口上使用下面的方法作为根时,只会找到高亮显示为黄色的元素。我需要找到蓝色元素,但一直没能找到。以下解决方案基于此帖子:

公共静态元素(AutomationElement根元素)
{
if(rootElement==null)返回;
var children=新列表();
var currentChild=TreeWalker.RawViewWalker.GetFirstChild(rootElement);
while(currentChild!=null)
{
添加(currentChild);
currentChild=TreeWalker.RawViewWalker.GetNextSibling(currentChild);
}
foreach(儿童中的儿童变量)
{
Console.WriteLine(child.ToString());
WalkControlElements(儿童);
}
}

因为它们不是处理它们的窗口。它们是根窗口的元素。您必须处理元素(或项目)。

好的,我该怎么做?我的任何项目都没有使用UIAutomation。我使用“FindWindowEx”、“FindWindow”、“FindWindowByIndex”和“SendMessage”方法在C#中实现自动化。例如:Intptr WindowHandler=FindWindow(“WindowsForms10.Window.8.app.0.33c0d9d”,“FOREXTrader PRO-LIVE”);在他之后,我使用FindWindowEx(WindowHandler,Intpr,Zero,QRibbonCaption1);然后通过FindWindowByIndex获得用户名字段并发送“WM_SETTEXT”“我想要的用户名值为的消息类型。在C#中搜索FindWindow,在C#中获取句柄并连接到其他应用程序。注意,对于Firefox等浏览器的自动化,最好使用扩展(插件)。通过JavaScript,您可以很容易地获得所需的节点并更改其值。您可以通过套接字编程或其他方法(如读写文件)将插件与C#App进行通信。
public static void WalkControlElements(AutomationElement rootElement)
    {
        if (rootElement == null) return;

        var children = new List<AutomationElement>();

        var currentChild = TreeWalker.RawViewWalker.GetFirstChild(rootElement);

        while (currentChild != null)
        {
            children.Add(currentChild);
            currentChild = TreeWalker.RawViewWalker.GetNextSibling(currentChild);
        }

        foreach (var child in children)
        {
            Console.WriteLine(child.ToString());
            WalkControlElements(child);
        }
    }