Получить URL Firefox? - PullRequest
       23

Получить URL Firefox?

6 голосов
/ 10 января 2009

Как я могу получить URL-адрес из запущенного экземпляра Firefox с помощью приложения Windows / консоль .NET 2.0? Подойдут коды C # или VB.

Спасибо!

Ответы [ 7 ]

6 голосов
/ 16 марта 2010

Опираясь на ответ Роба Кеннеди и используя NDde

using NDde.Client;

class Test
{
        public static string GetFirefoxURL()
        {
            DdeClient dde = new DdeClient("Firefox", "WWW_GetWindowInfo");
            dde.Connect();
            string url = dde.Request("URL", int.MaxValue);
            dde.Disconnect();
            return url;
        }
}

Примечание: это очень медленно. Это занимает несколько секунд на моем компьютере. Результат будет выглядеть примерно так:

"/315633/poluchit-url-firefox","Get Firefox URL? - Stack Overflow",""

Подробнее о браузере DDE здесь .

4 голосов
/ 10 января 2009

Для большинства браузеров, включая Internet Explorer, Navigator, Firefox и Opera, поддерживаемый и разрешенный способ сделать это - использовать DDE . Название темы во всех из них WWW_GetWindowInfo; меняется только имя целевого окна. Однако этот метод будет для вас сложным, потому что .Net не поддерживает DDE. Если вы сможете найти способ обойти это ограничение, у вас все будет готово.

2 голосов
/ 10 января 2009

кажется, что это может быть сложно, вот некоторые обсуждения по этому поводу: http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/c60b1699-9fd7-408d-a395-110c1cd4f297/

1 голос
/ 01 августа 2012
    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindowEx(IntPtr parentHandle,
    IntPtr childAfter, string className, IntPtr windowTitle);

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int SendMessage(IntPtr hWnd,
        int msg, int wParam, StringBuilder ClassName);

    private static string GetURL(IntPtr intPtr, string programName, out string url)
    {
        string temp=null;
        if (programName.Equals("chrome"))
        {
            var hAddressBox = FindWindowEx(intPtr, IntPtr.Zero, "Chrome_OmniboxView", IntPtr.Zero);
            var sb = new StringBuilder(256);
            SendMessage(hAddressBox, 0x000D, (IntPtr)256, sb);
            temp = sb.ToString();
        } 
        if (programName.Equals("iexplore"))
        {
            foreach (InternetExplorer ie in new ShellWindows())
            {
                var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(ie.FullName);
                if (fileNameWithoutExtension != null)
                {
                    var filename = fileNameWithoutExtension.ToLower();
                    if (filename.Equals("iexplore"))
                    {
                        temp+=ie.LocationURL + " ";
                    }
                }
            }
        }
        if (programName.Equals("firefox"))
       {
            DdeClient dde = new DdeClient("Firefox", "WWW_GetWindowInfo");
            dde.Connect();
            string url1 = dde.Request("URL", int.MaxValue);
            dde.Disconnect();
            temp = url1.Replace("\"","").Replace("\0","");
        }
        url = temp;
        return temp;
    }

Пожалуйста, следуйте ниже, чтобы запустить этот код Добавить ссылку> Com> Microsoft.Internet.Controls из VS.NET в ваш проект

Загрузите корзину из http://ndde.codeplex.com/ для класса DdeClient и добавьте ее в свой проект

Пожалуйста, дайте мне знать, если возникнет проблема

1 голос
/ 10 марта 2012

Использование MozRepl: https://github.com/bard/mozrepl/wiki/ + mozRepl .NET Connector: http://mozreplconnector.codeplex.com/releases/view/17398

  var connect = new MozReplConnectDotNet.MozReplConnect(4242);
  connect.Connect();
  Console.WriteLine(connect.SendRecieve("gBrowser.currentURI.spec"));
1 голос
/ 10 января 2009

Плохое решение, если что-то не получится: активируйте окно Firefox, отправьте Ctrl + L (активирует адресную строку), отправьте Ctrl + C (скопировать выделение, т. Е. URL, в буфер обмена) и прочитайте буфер обмена.

Множество проблем с этим методом (среди них он делает странные вещи для пользователя, если они перед компьютером), так что это всего лишь решение для резервного копирования ...

1 голос
/ 10 января 2009

Возможно, вы захотите проверить исходный код WatiN. Их следующая версия с открытым исходным кодом и поддерживает Firefox, поэтому я думаю, что функциональность для этого есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...