C# edgeの指定タイトルもウインドウを探して、アドレスバーを取得して返す関数

   /// <summary>
   /// 指定文字が含まれたEdgeウィンドウを監視して、URLを取得する
   /// </summary>
   /// <param name="sTitle"></param>
   /// <returns></returns>
   private static string MonitorEdgeWindowsForUrl(string sTitle = "127.0.0.1")
   {

       using var automation = new UIA3Automation();
       string foundUrl = null;

       while (foundUrl == null)
       {
           try
           {
               // "msedge" プロセス名を持つすべてのプロセスを取得
               var edgeProcesses = Process.GetProcessesByName("msedge");

               // msedge プロセスが存在しない場合、"" を返す
               if (edgeProcesses.Length == 0)
               {
                   return "";
               }

               foreach (var process in edgeProcesses)
               {
                   if (process.MainWindowHandle != IntPtr.Zero)
                   {
                       var windowElement = automation.FromHandle(process.MainWindowHandle);

                       // ウィンドウタイトルに 指定文字列 が含まれているか確認
                       if (windowElement.Name.Contains(sTitle))
                       {
                           // アドレスバーを取得
                           var addressBar = windowElement.FindFirstDescendant(cf => cf.ByControlType(ControlType.Edit));
                           if (addressBar != null)
                           {
                               foundUrl = addressBar.AsTextBox().Text;
                               Console.WriteLine($"URL: {foundUrl}");
                           }
                           else
                           {
                               Console.WriteLine("アドレスバーが見つかりませんでした。");
                           }

                           // ウィンドウを閉じる
                           windowElement.AsWindow().Close();

                           // ループ抜ける
                           break;
                       }
                   }
               }

           }
           catch (Exception ex)
           {
               Console.WriteLine($"Error processing window: {ex.Message}");
           }


           // Wait for a short duration before checking again
           System.Threading.Thread.Sleep(100);
       }

       return foundUrl;