我试图在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
类?
答案 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 。