2009-01-10 28 views
6

Làm thế nào tôi có thể nhận được url từ một thể hiện đang chạy của firefox bằng cách sử dụng .NET 2.0 windows/console app? Mã C# hoặc VB sẽ thực hiện.Nhận URL của Firefox?

Cảm ơn!

+0

Bạn cần phải rõ ràng hơn một chút. Bạn có nghĩa là làm thế nào để có được các url từ một thể hiện đang chạy của firefox trong một cửa sổ/giao diện điều khiển ứng dụng? – Kev

+0

vâng ... tôi đã chỉnh sửa câu hỏi. Cảm ơn! –

+0

Nếu điều này có thể được thực hiện, bạn nhận ra có thể có nhiều trường hợp mỗi tab có nhiều tab. Bạn đang cố gắng đạt được điều gì? – Kev

Trả lời

1

Bạn có thể muốn kiểm tra mã nguồn của WatiN. Phiên bản tiếp theo của họ là mã nguồn mở và hỗ trợ firefox, vì vậy tôi sẽ tưởng tượng ra chức năng để làm điều này là trong đó.

+0

Tôi đã chỉnh sửa các câu hỏi để thêm chi tiết. Tôi đang làm một ứng dụng winforms và tôi cần để có được URL trình duyệt. Tôi đã có các mã cho Url IE. Cảm ơn! –

4

Đối với hầu hết các trình duyệt, bao gồm Internet Explorer, Navigator, Firefox và Opera, cách hỗ trợ và xử phạt để làm điều này là để use DDE. Tên chủ đề trong tất cả chúng là WWW_GetWindowInfo; chỉ có tên của cửa sổ mục tiêu thay đổi. Tuy nhiên, kỹ thuật đó sẽ khó cho bạn bởi vì .Net không hỗ trợ DDE. Nếu bạn có thể tìm thấy một cách để vượt qua giới hạn đó, bạn sẽ được tất cả các thiết lập.

+0

Thư viện DDE dành cho .NET: http://www.codeplex.com/ndde – Foole

1

Giải pháp của người nghèo, nếu bất cứ điều gì khác không thành công: kích hoạt cửa sổ Firefox, gửi Ctrl + L (kích hoạt thanh địa chỉ), gửi Ctrl + C (lựa chọn bản sao, URL, vào clipboard) và đọc clipboard.

lô các vấn đề với phương pháp này (trong đó nó làm những thứ xa lạ đối với người dùng nếu họ đang ở phía trước của máy tính) để nó chỉ là một giải pháp sao lưu ...

+0

hiii Bạn có thể cho tôi biết cách gửi khóa bằng C# .net ??? – ankush

+0

Không. Vì tôi không biết C#. Tôi sẽ làm điều đó với AutoHotkey ... :-P – PhiLho

6

Xây dựng về câu trả lời và sử dụng Rob Kennedy 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: Điều này rất chậm. Phải mất vài giây trên máy tính của tôi. Kết quả sẽ trông giống như sau:

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

Thông tin thêm về trình duyệt DDE here.

+0

Tôi đã sử dụng đoạn mã này từ một vài năm trước đây.Tuy nhiên với việc phát hành một phiên bản mới của FF nó không hoạt động nữa. Bạn có biết liệu có cách nào khác để đạt được kết quả tương tự không? – 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; 
    } 

hãy làm như sau để chạy mã này Add Reference> Com> Microsoft.Internet.Controls từ VS.NET trong dự án của bạn

Tải xuống thùng rác từ http://ndde.codeplex.com/ cho lớp DdeClient và thêm nó vào dự án của bạn

Vui lòng cho tôi biết nếu có bất kỳ vấn đề nào

Các vấn đề liên quan