2010-07-20 1 views
5

IE의 주소 표시 줄에서 URL을 추출하려고합니다. (Windows 7의 IE 8)에서 다음 C# 코드를 사용합니다.액세스가 거부되었습니다 - 주소 표시 줄의 핸들에서 URL (텍스트)을 가져 오려고 할 때

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

GetWindowText 호출은 "액세스가 거부되었습니다"예외를 반환합니다. 관리자 권한으로 앱을 실행하면 "시스템이 지정된 파일을 찾을 수 없습니다."라는 메시지가 나타납니다.

아이디어가 있으십니까?

답변

2

GetWindowText()SendMessage()WM_GETTEXTLENGTH/WM_GETTEXT을 사용해야합니다. 다른 프로세스에서 컨트롤의 텍스트를 검색 할 수 없습니다.

편집; 버전 불가지론 방법 :

은 (C에 심판 추가 : \ WINDOWS를 \ system32를 \ shdocvw.dll을)

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

감사합니다! SHDocVw는 훌륭한 참고 자료입니다! 그러나 GetText 방법론을 고수해야한다고 생각하는 이유는 Chrome, Firefox, Safari, Opera와 같은 대부분의 Windows 용 브라우저에서 동일한 작업을 수행해야하기 때문입니다. 내 브라우저의 주소 표시 줄 핸들에서 URL을 추출하기 위해 각 브라우저에 대한 사용자 지정 메서드를 작성했습니다. – Sameet

관련 문제