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で書いた方が楽できるだろうと思います。
この記事へのコメントはありません。