2009-01-10 20 views
6

Jak mogę uzyskać adres URL działającej instancji Firefoxa przy użyciu aplikacji windows/console .NET 2.0? Będą działać kody C# lub VB.Pobierz adres URL przeglądarki Firefox?

Dzięki!

+0

Musisz być trochę bardziej przejrzysty. Masz na myśli, jak uzyskać adres URL z działającej instancji Firefoxa w aplikacji Windows/Console? – Kev

+0

tak ... zredagowałem pytanie. Dzięki! –

+0

Jeśli to możliwe, zdajesz sobie sprawę, że może istnieć wiele instancji z wieloma zakładkami. Co próbujesz osiągnąć? – Kev

Odpowiedz

1

Możesz chcieć sprawdzić w kodzie źródłowym WatiN. Ich następna wersja jest open source i obsługuje firefox, więc wyobrażam sobie, że funkcjonalność do tego jest w nim.

+0

Edytowałem pytanie, aby dodać więcej szczegółów. Robię aplikację WinForm i muszę uzyskać adres URL przeglądarki. Mam już kody do IE Url. Dzięki! –

4

Dla większości przeglądarek, w tym Internet Explorer, Navigator, Firefox i Opera, wspieranej i usankcjonowane sposób robienia tego celu jest use DDE. Nazwa tematu we wszystkich z nich to WWW_GetWindowInfo; zmieni się tylko nazwa okna docelowego. Ta technika będzie dla ciebie trudna, ponieważ .Net nie obsługuje DDE. Jeśli znajdziesz sposób na obejście tego ograniczenia, wszystko będzie gotowe.

+0

Biblioteka DDE dla .NET: http://www.codeplex.com/ndde – Foole

1

Rozwiązaniem dla biednego człowieka, jeśli coś innego się nie powiedzie: aktywuj okno przeglądarki Firefox, wyślij Ctrl + L (aktywuje pasek adresu), wyślij Ctrl + C (wybór kopiowania, np. URL, do schowka) i przeczytaj schowek.

wiele problemów z tą metodą (wśród nich robi dziwne rzeczy dla użytkownika, jeśli są one w przedniej części komputera), więc jest to tylko rozwiązanie backup ...

+0

hiii Czy możesz mi powiedzieć, jak wysłać klucze za pomocą C# .net ??? – ankush

+0

Nie. Ponieważ nie znam C#. Zrobiłbym to z AutoHotkey ... :-P – PhiLho

6

Opierając się na odpowiedź Rob Kennedy'ego i za pomocą 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: To bardzo wolno. Zajmuje to kilka sekund na moim komputerze. Wynik będzie wyglądać następująco:

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

Więcej informacji na temat przeglądarki DDE here.

+0

Używałem tego kawałka kodu od kilku lat.Jednak wraz z wydaniem nowej wersji FF nie działa już. Czy wiesz, czy istnieje inny sposób osiągnięcia tego samego wyniku? – 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; 
    } 

Proszę zrobić następujące czynności, aby uruchomić ten kod Add Reference> Com> Microsoft.Internet.Controls z VS.NET w projekcie

Pobierz pojemnik z http://ndde.codeplex.com/ dla klasy DdeClient i dodać go do swojego projektu

Proszę dać mi znać, jeśli jakikolwiek problem

Powiązane problemy