2010-07-20 22 views
5

Tôi đang cố gắng trích xuất URL từ thanh địa chỉ của IE. (IE 8 trên Windows 7) sử dụng mã C# sau.Truy cập bị từ chối - khi cố gắng lấy url (văn bản) từ tay cầm của thanh địa chỉ

 static string GetUrlFromIE() 
     { 
      IntPtr windowHandle = APIFuncs.getForegroundWindow(); 
      IntPtr childHandle; 
      String strUrlToReturn = ""; 

      //try to get a handle to IE's toolbar container 
      childHandle = APIFuncs.FindWindowEx(windowHandle, IntPtr.Zero, "WorkerW", IntPtr.Zero); 
      if (childHandle != IntPtr.Zero) 
      { 
       //get a handle to address bar 
       childHandle = APIFuncs.FindWindowEx(childHandle, IntPtr.Zero, "ReBarWindow32", IntPtr.Zero); 
       if (childHandle != IntPtr.Zero) 
       { 
        childHandle = APIFuncs.FindWindowEx(childHandle, IntPtr.Zero, "Address Band Root", IntPtr.Zero); 
        if (childHandle != IntPtr.Zero) 
        { 
         childHandle = APIFuncs.FindWindowEx(childHandle, IntPtr.Zero, "Edit", IntPtr.Zero); 
         if (childHandle != IntPtr.Zero) 
         { 
          strUrlToReturn = new string((char)0, 256); 
          GetWindowText(hwnd, strUrlToReturn , strUrlToReturn.Length); 
         } 
        } 
       } 
      } 
      return strUrlToReturn; 
     } 

Cuộc gọi GetWindowText trả về ngoại lệ "Truy cập bị từ chối". Khi chạy ứng dụng có đặc quyền quản trị, nó sẽ ném "Hệ thống không thể tìm thấy tệp được chỉ định".

Bất kỳ ý tưởng nào?

Trả lời

2

GetWindowText() không thể truy xuất văn bản của điều khiển trong quá trình khác, thay vào đó bạn nên sử dụng SendMessage() với WM_GETTEXTLENGTH/WM_GETTEXT.

Chỉnh sửa; Version cách thuyết bất khả tri:

(Thêm một ref để c: \ WINDOWS \ system32 \ shdocvw.dll)

using SHDocVw; 
. 
. 
foreach (InternetExplorer ieInst in new ShellWindowsClass()) 
    Console.WriteLine(ieInst.LocationURL); 
+0

Cảm ơn! SHDocVw là một tài liệu tham khảo tuyệt vời! Tuy nhiên, lý do tôi nghĩ tôi phải tuân theo phương pháp GetText là vì tôi cần phải làm điều tương tự trong hầu hết các trình duyệt phổ biến cho Windows - Chrome, Firefox, Safari, Opera. Kế hoạch của tôi là viết một phương thức tùy chỉnh cho mỗi trình duyệt để trích xuất url từ thanh địa chỉ của nó. – Sameet

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