Я не могу получить URL-адрес Microsoft Edge из приложения c# windows Forms - PullRequest
0 голосов
/ 19 июня 2020

Я пробовал следующий метод получения URL-адреса, но он работает только для windows браузера Edge по умолчанию, не работает в обновленной версии браузера Edge (Ver: 83.0). Я использую этот браузер: https://www.microsoft.com/en-us/edge

public static string GetEdgeUrl(Process process)
{
            try
            {
                if (process == null)
                    throw new ArgumentNullException("process");
                if (process.MainWindowHandle == IntPtr.Zero)
                    return null;
                AutomationElement main = AutomationElement.FromHandle(process.MainWindowHandle);
                if (main == null) // not edge
                    return null;
                AutomationElement window = main.FindFirst(TreeScope.Children, new AndCondition(
            new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Window),
            new PropertyCondition(AutomationElement.NameProperty, "Microsoft Edge")));
                if (window == null) // not edge
                    return null;
                var adressEditBox = window.FindFirst(TreeScope.Children,
                new PropertyCondition(AutomationElement.AutomationIdProperty, "addressEditBox"));
            return ((TextPattern)adressEditBox.GetCurrentPattern(TextPattern.Pattern)).DocumentRange.GetText(int.MaxValue);
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

1 Ответ

0 голосов
/ 22 июня 2020

Наконец я нашел ответ. Это работает для меня. Я использовал ту же технику, что и Chrome. Спасибо @ stuartd

if (process == null)
                    throw new ArgumentNullException("process");
                if (process.MainWindowHandle == IntPtr.Zero)
                    return null;
                AutomationElement element = AutomationElement.FromHandle(process.MainWindowHandle);
                if (element == null)
                    return null;
                AutomationElement edit = element.FindFirst(TreeScope.Subtree,
                     new AndCondition(
                          new PropertyCondition(AutomationElement.NameProperty, "address and search bar", PropertyConditionFlags.IgnoreCase),
                          new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit)));
                if (edit != null)
                {
                    var i = ((ValuePattern)edit.GetCurrentPattern(ValuePattern.Pattern)).Current.Value as string;
                    return i;
                }
                else
                {
                    return "";
                }
...