我一直在使用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”,请确保服务器应用程序正在运行,并且支持指定的服务名称和主题名称对。
在此问题上的任何帮助将不胜感激,因为这已经成为一项艰巨的任务。
到目前为止,这就是我所拥有的(尽管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(); } }