一尘不染

从C#Windows Forms应用程序检索当前URL

c#

我一直在使用Visual C#设计程序,遇到了使程序与Web浏览器交互的问题。基本上,我需要从网络浏览器(Internet
Explorer,Firefox,Chrome等)中检索URL地址。

我认为这并不是一件容易的事,但是经过数天的研究和测试,这似乎几乎是不可能的!到目前为止,我已经遇到了这个…

获取Firefox URL?

其中具有以下代码:

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;
    }
}

对于Firefox来说,这是完美的选择,但是由于某些原因,我无法使其与其他任何东西一起使用。我已经在Internet上找到了将“
Firefox”的代码部分更改为“ Iexplore”的方法,并尝试了其他形式的Internet Explorer表达,但是出现以下错误:

“客户端无法连接到“ IExplorer | WWW_GetWindowInfo”,请确保服务器应用程序正在运行,并且支持指定的服务名称和主题名称对。

在此问题上的任何帮助将不胜感激,因为这已经成为一项艰巨的任务。


阅读 244

收藏
2020-05-19

共1个答案

一尘不染

到目前为止,这就是我所拥有的(尽管Chrome浏览器上没有找到任何有用的文章,除了使用FindWindowEx之外(我个人并不特别喜欢这种方法)。

public class BrowserLocation
{
    /// <summary>
    /// Structure to hold the details regarding a browed location
    /// </summary>
    public struct URLDetails
    {
        /// <summary>
        /// URL (location)
        /// </summary>
        public String URL;

        /// <summary>
        /// Document title
        /// </summary>
        public String Title;
    }

    #region Internet Explorer

    // requires the following DLL added as a reference:
    // C:\Windows\System32\shdocvw.dll

    /// <summary>
    /// Retrieve the current open URLs in Internet Explorer
    /// </summary>
    /// <returns></returns>
    public static URLDetails[] InternetExplorer()
    {
        System.Collections.Generic.List<URLDetails> URLs = new System.Collections.Generic.List<URLDetails>();
        var shellWindows = new SHDocVw.ShellWindows();
        foreach (SHDocVw.InternetExplorer ie in shellWindows)
            URLs.Add(new URLDetails() { URL = ie.LocationURL, Title = ie.LocationName });
        return URLs.ToArray();
    }

    #endregion

    #region Firefox

    // This requires NDde
    // http://ndde.codeplex.com/

    public static URLDetails[] Firefox()
    {
        NDde.Client.DdeClient dde = new NDde.Client.DdeClient("Firefox", "WWW_GetWindowInfo");
        try
        {
            dde.Connect();
            String url = dde.Request("URL", Int32.MaxValue);
            dde.Disconnect();

            Int32 stop = url.IndexOf('"', 1);
            return new URLDetails[]{
                new URLDetails()
                {
                    URL = url.Substring(1, stop - 1),
                    Title = url.Substring(stop + 3, url.Length - stop - 8)
                }
            };
        }
        catch (Exception)
        {
            return null;
        }
    }

    #endregion
}

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Internet Explorer: ");
        (new List<BrowserLocation.URLDetails>(BrowserLocation.InternetExplorer())).ForEach(u =>
        {
            Console.WriteLine("[{0}]\r\n{1}\r\n", u.Title, u.URL);
        });
        Console.WriteLine();

        Console.WriteLine("Firefox:");
        (new List<BrowserLocation.URLDetails>(BrowserLocation.Firefox())).ForEach(u =>
        {
            Console.WriteLine("[{0}]\r\n{1}\r\n", u.Title, u.URL);
        });
        Console.WriteLine();
    }
}
2020-05-19