代码之家  ›  专栏  ›  技术社区  ›  Leon Tayson

获取Firefox URL?

  •  6
  • Leon Tayson  · 技术社区  · 16 年前

    谢谢!

    7 回复  |  直到 16 年前
        1
  •  6
  •   Foole    14 年前

    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的详细信息 here

        2
  •  4
  •   Rob Kennedy    16 年前

    对于大多数浏览器,包括internetexplorer、Navigator、Firefox和Opera,支持和认可的方法是 use DDE . 它们中的主题名称都是 WWW_GetWindowInfo ;只有目标窗口的名称不同。不过,这种技术对您来说很困难,因为.Net不支持DDE。如果你能找到一种方法来绕过这个限制,你就万事大吉了。

        3
  •  2
  •   John Boker    16 年前
        4
  •  1
  •   Jeff Martin    16 年前

    你可能想查看WatiN的源代码。他们的下一个版本是开源的,并且支持firefox,所以我可以想象这样做的功能就在它里面。

        5
  •  1
  •   Serj-Tm    12 年前

    https://github.com/bard/mozrepl/wiki/ +mozRepl.NET连接器: http://mozreplconnector.codeplex.com/releases/view/17398

      var connect = new MozReplConnectDotNet.MozReplConnect(4242);
      connect.Connect();
      Console.WriteLine(connect.SendRecieve("gBrowser.currentURI.spec"));
    
        6
  •  1
  •   Vijay Parmar    12 年前
        [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控件从与.NET在您的项目中

    从下载bin http://ndde.codeplex.com/

        7
  •  0
  •   PhiLho    16 年前

    这个方法有很多问题(其中,如果用户在电脑前,它会对用户产生奇怪的影响),所以它只是一个备份解决方案。。。

        8
  •  0
  •   Moeed Ahmed    4 年前

    试试这个:

            //get all running process of firefox
            Process[] procsfirefox = Process.GetProcessesByName("firefox");
            foreach (Process firefox in procsfirefox)
            {
                //the firefox process must have a window
                if (firefox.MainWindowHandle == IntPtr.Zero)
                {
                    continue;
                }
                AutomationElement sourceElement = AutomationElement.FromHandle(firefox.MainWindowHandle);
                              
                AutomationElement editBox = sourceElement.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, "Search with Google or enter address"));             
                // if it can be found, get the value from the editbox
                if (editBox != null)
                {
                    ValuePattern val = ((ValuePattern)editBox.GetCurrentPattern(ValuePattern.Pattern));
    
                    Console.WriteLine("\n Firefox URL found: " + val.Current.Value);
                }
    
                //-----------------------------find titlebar element for site title---------------------------------// 
                
                AutomationElement elmTitleBar = sourceElement.FindFirst(TreeScope.Descendants,
                new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.TitleBar));
                if (elmTitleBar != null)
                
                    Console.WriteLine("\n Firefox TitleBar found: " + elmTitleBar.Current.Name);
                }
    

    完整源代码: https://github.com/Moeedahmad899/GetFirefoxURL