一尘不染

如何从Chrome和Firefox获取打开页面的URL?

c#

我正在编写一个系统任务栏应用程序,该应用程序需要检查内部基于Web的应用程序是否已打开。

我可以使用以下方法检查IE:

SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();
        string filename;
        bool sdOpen = false;
        foreach (SHDocVw.InternetExplorer ie in shellWindows)
        {
            filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
            if (filename.Equals("iexplore"))
            {
                string[] urlParts = (ie.LocationURL.ToString()).Split('/');
                string website = urlParts[2];
                if (website == "myApp:8080") { sdOpen = true; };
            }
        }

        if (sdOpen) { Console.WriteLine("App is open"); } else { Console.WriteLine("App is not open"); };

        Console.ReadKey(true);

但是,某些使用该系统的用户更喜欢Chrome或Firefox。

我该如何针对Chrome和Firefox进行与上述相同的操作(即获取浏览器中所有打开的标签页的网址)?(我不会打扰其他浏览器,因为它们是我们组织中唯一使用的浏览器。)


阅读 830

收藏
2020-05-19

共1个答案

一尘不染

它适用于每种浏览器。那是主要的:

  • Internet Explorer- 您可以使用SHDocVw(就像以前一样)
  • Firefox- 您可以使用DDE获取URL(以下来源)
  • Chrome- 枚举所有子窗口时可以获取URL,直到使用“ Chrome_OmniboxView”类访问控件,然后使用GetWindowText
  • Opera- 您可以使用与Firefox相同的功能,但使用“ opera”
  • Safari- 由于使用自定义绘制控件,因此没有已知方法

编辑:自2014年以来,Chrome发生了变化,您需要获取具有Acessibility的URL。

使用DDE从Firefox /
Opera获取URL的代码(使用NDDE-唯一适用于.NET的DDE包装器):

//
// usage: GetBrowserURL("opera") or GetBrowserURL("firefox")
//

private string GetBrowserURL(string browser) {
    try {
        DdeClient dde = new DdeClient(browser, "WWW_GetWindowInfo");
        dde.Connect();
        string url = dde.Request("URL", int.MaxValue);
        string[] text = url.Split(new string[] { "\",\"" }, StringSplitOptions.RemoveEmptyEntries);
        dde.Disconnect();
        return text[0].Substring(1);
    } catch {
        return null;
    }
}
2020-05-19