2009-01-10 8 views
6

Comment puis-je obtenir l'URL à partir d'une instance de firefox utilisant l'application .NET 2.0 windows/console? Les codes C# ou VB feront l'affaire.Obtenir l'URL de Firefox?

Merci!

+0

Vous devez être un peu plus clair. Voulez-vous dire comment obtenir l'URL à partir d'une instance de Firefox en cours d'exécution dans une application Windows/console? – Kev

+0

oui ... j'ai édité la question. Merci! –

+0

Si cela est possible, vous réalisez qu'il peut y avoir plusieurs instances avec plusieurs onglets. Qu'essayez-vous d'accomplir? – Kev

Répondre

1

Vous pouvez vérifier dans le code source de WatiN. Leur prochaine version est open source et prend en charge firefox, donc j'imagine que la fonctionnalité pour faire cela est dedans.

+0

J'ai modifié la question pour ajouter plus de détails. Je fais une application winforms et j'ai besoin d'obtenir l'URL du navigateur. J'ai déjà les codes pour l'URL IE. Merci! –

4

Pour la plupart des navigateurs, y compris Internet Explorer, navigateur, Firefox et Opera, la manière soutenue et sanctionné d'y parvenir est de use DDE. Le nom du sujet dans chacun d'eux est WWW_GetWindowInfo; seul le nom de la fenêtre cible varie. Cette technique sera difficile pour vous, car .Net ne prend pas en charge DDE. Si vous pouvez trouver un moyen de contourner cette limitation, vous serez tous ensemble.

+0

Bibliothèque DDE pour .NET: http://www.codeplex.com/ndde – Foole

1

La solution du pauvre, si autre chose échoue: activer la fenêtre Firefox, envoyer Ctrl + L (active la barre d'adresse), envoyer Ctrl + C (copier la sélection, ie URL, au presse-papiers) et lire le presse-papiers.

Lot de problèmes avec cette méthode (parmi eux, il fait des choses étranges pour l'utilisateur si elles sont en face de l'ordinateur) donc il est une solution de sauvegarde ...

+0

hiii Pouvez-vous me dire comment envoyer des clés en utilisant C# .net ??? – ankush

+0

Non. Parce que je ne connais pas C#. Je le ferais avec AutoHotkey ... :-P – PhiLho

6

Miser sur la réponse de Rob Kennedy et à l'aide 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: Ceci est très lent. Cela prend quelques secondes sur mon ordinateur. Le résultat ressemblera à quelque chose comme ceci:

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

Plus d'informations sur le navigateur DDE here.

+0

J'utilisais ce morceau de code depuis quelques années.Cependant avec la sortie d'une nouvelle version de FF ça ne marche plus. Savez-vous s'il existe un autre moyen d'obtenir le même résultat? – 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; 
    } 

S'il vous plaît faire comme suit pour exécuter ce code Ajouter Référence> Com> Microsoft.Internet.Controls de VS.NET dans votre projet

Télécharger le bac de http://ndde.codeplex.com/ pour la classe DdeClient et l'ajouter à votre projet

S'il vous plaît laissez-moi savoir si un problème

Questions connexes