2017/8/18 追記:
当記事のコードは現在動作しなくなっているため、新しくコードを書き直しました。
Microsoft EdgeのDeveloper Resourcesを見てみると、“サポートが必要ならStack Overflowで聞いてね!”的なことが書いてあります。
そしてStack OverflowにはEdge関連の質問が集まっているわけですが、外部からの制御に関しては下記のような質問が寄せられています(2015/8/18 時点)。
- Microsoft Edge: Get Window URL and Title
- http://stackoverflow.com/questions/31967430/microsoft-edge-get-window-url-and-title
- Get the Title and URL of all the pages opened in MS-Edge Browser
- https://stackoverflow.com/questions/32049904/get-the-title-and-url-of-all-the-pages-opened-in-ms-edge-browser
特に「EdgeからURLとタイトルを取得したい」という質問では、Microsoftの中の人が回答をつけていて、UI Automationを使ったコードを紹介しています。
当ブログでもすでにこの記事で同様のコードを紹介していますが、.NETではコードを書いていなかったので、良い機会なのでC#でも同じ処理を行うコードを書いてみたいと思います。
※ UIAutomationClient, UIAutomationTypes 要参照
using System;
using System.Windows.Automation;
namespace UIAutomationEdge
{
class Program
{
public static void Main(string[] args)
{
AutomationElement root = AutomationElement.RootElement;
AutomationElement edge = root.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, "TitleBar"));
edge = edge.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "Windows.UI.Core.CoreWindow"));
if (edge != null) {
AutomationElement tabslist = edge.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, "TabsList"));
AutomationElementCollection items = tabslist.FindAll(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "GridViewItem"));
foreach (AutomationElement elm in items) {
SelectionItemPattern sel = (SelectionItemPattern)elm.GetCurrentPattern(SelectionItemPattern.Pattern);
sel.Select();
AutomationElement address = edge.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, "addressEditBox"));
address.SetFocus();
ValuePattern v = (ValuePattern)address.GetCurrentPattern(ValuePattern.Pattern);
Console.WriteLine("Title:" + elm.Current.Name + ", URL:" + v.Current.Value);
}
}
}
}
}
VBAに比べて大分スッキリしたコードになりました。
「PowerShellでMicrosoft Edgeを操作する」でも書いている通り、EdgeのオートメーションにはSelenium + WebDriverがオススメですが、UI Automationを使う場合は.NETで書いた方が楽できるだろうと思います。

















この記事へのコメントはありません。