Windows 10

起動中のMicrosoft EdgeからタイトルとURLを取得するC#コード(UI Automation編)

2017/8/18 追記:
当記事のコードは現在動作しなくなっているため、新しくコードを書き直しました。


Microsoft EdgeのDeveloper Resourcesを見てみると、“サポートが必要ならStack Overflowで聞いてね!”的なことが書いてあります。

そしてStack OverflowにはEdge関連の質問が集まっているわけですが、外部からの制御に関しては下記のような質問が寄せられています(2015/8/18 時点)。

特に「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);
        }
      }
    }
  }
}

AutomateMicrosoftEdge_UIA_Csharp_01

VBAに比べて大分スッキリしたコードになりました。
PowerShellでMicrosoft Edgeを操作する」でも書いている通り、EdgeのオートメーションにはSelenium + WebDriverがオススメですが、UI Automationを使う場合は.NETで書いた方が楽できるだろうと思います。

関連記事

  1. Windows関連

    [Windows 8]画像をタッチしてログオンする。

    ※ 下記はWindows Developer Preview(英語版・…

  2. Windows 10

    特殊フォルダやプログラムのCLSID一覧とShellコマンド一覧

    「「プログラムと機能」からインストールされているアプリケーションの一覧…

  3. Windows 10

    ストアアプリを起動するPowerShellコード

    ストアアプリ(UWPアプリ)は実行ファイルをダブルクリックする等して直…

  4. Windows 10

    WebDriverを使わずMicrosoft Edgeを制御するC#コード

    以前書いた記事のように、Microsoft EdgeにはInterne…

  5. Windows関連

    [Windows 8]自動的にログオンする。

    ※ 下記はWindows Developer Preview(英語版・…

コメント

  • コメント (0)

  • トラックバックは利用できません。

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP