こんにちは。
Windows10でC#のアプリケーションを開発しています。
Visual Studio 2017 Communityを使っています。
###前提・実現したいこと
現在開いているEdgeのURLとタイトルを取得したいです。
###試したこと
以前に質問して、Edgeに関する参考サイトを教えていただきました。
https://www.ka-net.org/blog/?p=6148
ここを参考に、というかまるっとそのままですが、コンソールコマンドのプロジェクトを作り、実行してみましたが、いきなりAutomationElement edgeでedgeを取得することができず、nullになっています。
参考サイトは、2015年8月ごろの日付なので、それほど古いとも環境が異なっているとも思えないのです。
アドバイスいただければ幸いです。
[追記]
なるほど。CreatorsUpdateで変わっているのですね。情報ありがとうございます。
TreeScope.Childrenだけなのがおかしいとのことですが、具体的にはどうしたらよいのでしょう?
UIAutomationClient, UIAutomationTypesをcomで参照追加しました。
###発生している問題・エラーメッセージ
AutomationElement edgeでedgeを取得することができず、nullになっています。
###該当のソースコード
C#
1using System; 2using System.Runtime.InteropServices; 3using System.Text; 4using System.Windows.Automation; 5 6namespace UIAutomationEdge 7{ 8 class Program 9 { 10 public delegate bool Win32Callback(IntPtr hwnd, IntPtr lParam); 11 [DllImport("user32.Dll")] 12 [return: MarshalAs(UnmanagedType.Bool)] 13 public static extern bool EnumChildWindows(IntPtr parentHandle, Win32Callback callback, IntPtr lParam); 14 15 [DllImport("user32.dll", CharSet = CharSet.Auto)] 16 static public extern IntPtr GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount); 17 18 [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)] 19 public static extern IntPtr GetParent(IntPtr hWnd); 20 public static void Main(string[] args) 21 { 22 AutomationElement root = AutomationElement.RootElement; 23 AutomationElement edge = root.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, "TitleBar")); 24 if (edge != null) 25 { 26 edge = edge.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "Windows.UI.Core.CoreWindow")); 27 if (edge != null) 28 { 29 Win32Callback childProc = new Win32Callback(EnumWindow); 30 EnumChildWindows((IntPtr)edge.Current.NativeWindowHandle, childProc, (IntPtr)0); 31 Console.ReadKey(true); 32 } 33 } 34 } 35 36 private static bool EnumWindow(IntPtr handle, IntPtr pointer) 37 { 38 StringBuilder buf = new StringBuilder(255); 39 IntPtr ret = GetClassName(handle, buf, buf.Capacity); 40 if (ret != IntPtr.Zero) 41 { 42 string className = buf.ToString(); 43 if (className == "Windows.UI.Core.CoreComponentInputSource") 44 { 45 IntPtr hTitle = GetParent(handle); 46 AutomationElement title = AutomationElement.FromHandle(hTitle); 47 AutomationElement url = AutomationElement.FromHandle(handle); 48 Console.WriteLine(title.Current.Name + ", " + url.Current.Name); 49 } 50 } 51 return true; 52 } 53 } 54 } 55}
###補足情報(言語/FW/ツール等のバージョンなど)
Microsoft Visual Studio Community 2017
Version 15.0.26228.9 D15RTWSVC
Microsoft .NET Framework
Version 4.6.01586
です。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー