获取AutomationElement

时间:2016-03-31 10:02:23

标签: c#

我试图在Chrome(或其他浏览器)中找到第一个音频播放标签。

我已经设法获取所有已打开的Chrome标签的标题(主要使用Getting the current tab's URL from Google Chrome using C#Get chrome browser title using c#中的信息)。

但只是寻找包含" Youtube" 这个词的标签似乎有点奇怪(因为它也会找到链接的问题或其他"非音乐内容& #34;只要找到单词Youtube)。

有没有办法找到第一个音频播放标签?

修改
修复了最初的问题:

Process[] chromeProcesses = Process.GetProcessesByName("chrome");

        if(chromeProcesses.Length > 0)
        {
            foreach(Process proc in chromeProcesses)
            {
                if (proc.MainWindowHandle == IntPtr.Zero)
                {
                    continue;
                }

                AutomationElement chrome = AutomationElement.FromHandle(proc.MainWindowHandle);

                var tabs = chrome.FindAll(TreeScope.Descendants, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.TabItem));
                if (tabs != null)
                {
                    foreach(AutomationElement tab in tabs)
                    {
                        string tabTitle = tab.GetCurrentPropertyValue(AutomationElement.NameProperty).ToString();
//...

我目前正在检查" - YouTube " (在字符串的末尾)在tabtitle中。但是有一种方法可以更精确;通过获取标签文本的下一个元素。

使用inspect.exe工具,我发现当前正在播放""选项卡旁边有一个空按钮(实际上是扬声器图标) - 否则它是一个关闭按钮。因此,通过检查下一个元素,应该可以找出标签是否也在播放音乐。

但我现在正在努力寻找下一个元素。如何使用AutomationElement类?

1 个答案:

答案 0 :(得分:0)

修正了一切:

Process[] chromeProcesses = Process.GetProcessesByName("chrome");

        if(chromeProcesses.Length > 0)
        {
            foreach(Process proc in chromeProcesses)
            {
                if (proc.MainWindowHandle == IntPtr.Zero)
                {
                    continue;
                }

                AutomationElement chrome = AutomationElement.FromHandle(proc.MainWindowHandle);

                var tabs = chrome.FindAll(TreeScope.Descendants, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.TabItem));
                if (tabs != null)
                {
                    foreach(AutomationElement tab in tabs)
                    {
                        string tabTitle = tab.GetCurrentPropertyValue(AutomationElement.NameProperty).ToString();

                        AutomationElement next = tab.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Button));
                        if (next != null)
                        {
                            string nextContent = next.GetCurrentPropertyValue(AutomationElement.NameProperty).ToString();
                            if(nextContent != "")
                            {
                                break;
                            }
                        }

                        if (tabTitle.LastIndexOf(YoutubeRecogPattern, StringComparison.OrdinalIgnoreCase) > 0)
                        {
                            if (tabTitle != this.LastTitle)
                            {
                                string videoTitle = tabTitle.Substring(0, tabTitle.Length - YoutubeRecogPattern.Length);
// ...

YoutubeRecogPattern - YouTube