2009-01-10 19 views
6

¿Cómo puedo obtener la URL de una instancia de ejecución de firefox utilizando la aplicación Windows/Console de .NET 2.0? Los códigos C# o VB funcionarán.Obtener URL de Firefox?

Gracias!

+0

Debe ser un poco más claro. ¿Quiere decir cómo obtener la URL de una instancia de ejecución de firefox en una aplicación de Windows/consola? – Kev

+0

sí ... he editado la pregunta. ¡Gracias! –

+0

Si esto se puede hacer, se dará cuenta de que podría haber múltiples instancias, cada una con múltiples pestañas. ¿Qué estás intentando lograr? – Kev

Respuesta

1

Es posible que desee comprobar en el código fuente de WatiN. Su próxima versión es de código abierto y es compatible con Firefox, por lo que me imagino que la funcionalidad para hacerlo está en él.

+0

He editado la pregunta para agregar más detalles. Estoy haciendo una aplicación de winforms y necesito obtener la URL del navegador. Ya tengo los códigos para la URL de IE. ¡Gracias! –

4

Para la mayoría de los navegadores, incluido Internet Explorer, navegador, Firefox y Opera, el camino apoyado y sancionado de hacer esto es a use DDE. El nombre del tema en todos ellos es WWW_GetWindowInfo; solo el nombre de la ventana de destino varía. Sin embargo, esa técnica será difícil para ti porque .Net no es compatible con DDE. Si puedes encontrar una manera de evitar esa limitación, estarás listo.

+0

Biblioteca DDE para .NET: http://www.codeplex.com/ndde – Foole

1

Solución deficiente, si algo falla: active la ventana de Firefox, envíe Ctrl + L (activa la barra de direcciones), envíe Ctrl + C (copie la selección, es decir, URL al portapapeles) y lea el portapapeles.

montón de problemas con este método (entre ellos lo hace cosas extrañas para el usuario si se encuentran en frente de la computadora) por lo que es sólo una solución de copia de seguridad ...

+0

hiii ¿Puede decirme cómo enviar claves usando C# .net ??? – ankush

+0

No. Porque no sé C#. Lo haría con AutoHotkey ... :-P – PhiLho

6

Sobre la base de la respuesta de Rob Kennedy y el uso 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; 
     } 
} 

NB: Esto es muy lento. Tarda unos segundos en mi computadora. El resultado será algo como esto:

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

Más información en el navegador DDE here.

+0

Estaba usando este código desde hace un par de años.Sin embargo, con el lanzamiento de una nueva versión de FF ya no funciona. ¿Sabes si hay alguna otra forma de lograr el mismo resultado? – Ayorus

1
[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; 
    } 

Por favor siguiente para ejecutar el código Agregar referencia> Com> Microsoft.Internet.Controls de VS.NET en su proyecto

Descargar la papelera de http://ndde.codeplex.com/ para la clase DdeClient y añadirlo a su proyecto

Por favor, hágamelo saber si cualquier problema