2010-07-20 16 views
5

मैं आईई के पता बार से यूआरएल निकालने की कोशिश कर रहा हूं। (विंडोज 7 पर आईई 8) निम्नलिखित सी # कोड का उपयोग कर।एक्सेस अस्वीकार कर दिया गया है - पता बार के हैंडल से यूआरएल (टेक्स्ट) प्राप्त करने का प्रयास करते समय

 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() किसी अन्य प्रक्रिया में नियंत्रण के पाठ को पुनर्प्राप्त नहीं कर सकता है, इसके बजाय आपको WM_GETTEXTLENGTH/WM_GETTEXT के साथ उपयोग करना चाहिए।

संपादित करें; संस्करण नास्तिक रास्ता:

(ग करने के लिए एक रेफरी जोड़ें: \ WINDOWS \ system32 \ Shdocvw.dll)

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

धन्यवाद! SHDocVw एक शानदार संदर्भ है! हालांकि, मुझे लगता है कि मुझे GetText पद्धति से चिपकना होगा क्योंकि मुझे विंडोज़ - क्रोम, फ़ायरफ़ॉक्स, सफारी, ओपेरा के लिए लोकप्रिय ब्राउज़र में एक ही चीज़ करने की ज़रूरत है। मेरी योजना प्रत्येक ब्राउज़र के लिए अपने एड्रेस बार हैंडल से यूआरएल निकालने के लिए एक कस्टम विधि लिखना था। – Sameet

संबंधित मुद्दे