2

For detect URL in firefox I use DDE

 DdeClient dde = new DdeClient("Firefox", "WWW_GetWindowInfo");
 dde.Connect();
 string url1 = dde.Request("URL", int.MaxValue);
 dde.Disconnect();
 temp = url1.Replace("\"", "").Replace("\0", "");
 dde = null;

This code works perfectly!, but it is too slow for connect (dde.Connect();) is too slow 7/8 second! Is there another way to get url from firefox? (example use API windows like "SendMessage")

  • SendMessage would be far too fragile. There's no guarantee that the names of controls in the UI will all stay exactly the same. In fact, with as many times as Firefox has been completely redesigned, I'll bet they've already changed many times. – Cody Gray - on strike Mar 16 '13 at 09:13
  • Have you had a look at http://stackoverflow.com/questions/5317642/retrieve-current-url-from-c-sharp-windows-form ? – Simon Opelt Mar 16 '13 at 16:25

2 Answers2

2
            Process[] process = Process.GetProcessesByName("firefox");

            foreach (Process firefox in process)
            {
                // the chrome process must have a window
                if (firefox.MainWindowHandle == IntPtr.Zero)
                {
                    return null;
                }

                AutomationElement element = AutomationElement.FromHandle(firefox.MainWindowHandle);
                if (element == null)
                    return null;

                //search for first custom element
                AutomationElement custom1 = element.FindFirst(TreeScope.Descendants,
                 new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Custom));

                //search all custom element children
                AutomationElementCollection custom2 = custom1.FindAll(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Custom));

                //for each custom child
                foreach (AutomationElement item in custom2)
                {
                    //search for first custom element
                    AutomationElement custom3 = item.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Custom));
                    //search for first document element
                    AutomationElement doc3 = custom3.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Document));



                    if (!doc3.Current.IsOffscreen)
                    {
                        url = ((ValuePattern)doc3.GetCurrentPattern(ValuePattern.Pattern)).Current.Value as string;
                        return url;
                    }                      
                }
            }             
            return url;
   }
Melih Yıldız'
  • 415
  • 5
  • 17
2

This works well for me:

                AutomationElement element = AutomationElement.FromHandle(intPtr);  // intPtr is the MainWindowHandle for FireFox browser
                element = element.FindFirst(TreeScope.Subtree,
                      new AndCondition(
                          new PropertyCondition(AutomationElement.NameProperty, "Search or enter address"),
                          new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit)));
                string url = ((ValuePattern)element.GetCurrentPattern(ValuePattern.Pattern)).Current.Value as string;
Randall Deetz
  • 512
  • 4
  • 25