获取Firefox URL?

如何使用.NET 2.0 Windows / console应用程序从正在运行的firefox实例获取URL? C#或VB代码都可以。

谢谢!

以Rob Kennedy的答案为基础并使用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; } } 

注意:这很慢。 我的电脑需要几秒钟。 结果将如下所示:

 "http://stackoverflow.com/questions/430614/get-firefox-url","Get Firefox URL? - Stack Overflow","" 

关于浏览器DDE的更多信息。

对于大多数浏览器,包括Internet Explorer,Navigator,Firefox和Opera,支持和批准的方法是使用DDE 。 所有这些主题名称都是WWW_GetWindowInfo ; 只有目标窗口的名称不同。 但是,这种技术对你来说很难,因为.Net不支持DDE。 如果你能找到解决这个限制的方法,你就会全力以赴。

看起来这可能很难,这里有一些讨论: http : //social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/c60b1699-9fd7-408d-a395-110c1cd4f297/

您可能想要查看WatiN的源代码。 他们的下一个版本是开源的,并支持firefox,所以我想这样做的function就在其中。

穷人的解决方案,如果还有其他方法失败:激活Firefox窗口,发送Ctrl + L(激活地址栏),发送Ctrl + C(复制选择,即URL,到剪贴板)并读取剪贴板。

这种方法存在很多问题(如果它们在计算机前面,它们会为用户提供奇怪的东西),所以它只是一个备份解决方案……

使用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")); 
  [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; } 

请执行以下操作以在项目中运行此代码从VS.NET添加参考> Com> Microsoft.Internet.Controls

从http://ndde.codeplex.com/下载用于DdeClient类的bin并将其添加到您的项目中

如有任何问题,请告诉我