2012-06-22 16 views
6

का उपयोग कर आईई में वर्तमान यूआरएल प्राप्त करें मैं विजुअल बेसिक में इंटरनेट एक्सप्लोरर ऑब्जेक्ट के साथ काम कर रहा हूं। क्या मौजूदा यूआरएल की प्रतिलिपि बनाने का कोई तरीका आईई प्रदर्शित कर रहा है, इसलिए मैं इसे अपने क्लिपबोर्ड के साथ कहीं और पेस्ट कर सकता हूं?विजुअल बेसिक

+0

यह शायद आपके से थोड़ा अधिक जटिल हो, और यह वीबी.नेट है, लेकिन यह अनुवाद योग्य होना चाहिए। उम्मीद है कि यह मदद करता है [यूआरएल प्राप्त करें] (http://www.codeproject.com/Articles/204929/Getting-current-browser-URL-with-VB-NET) –

+0

कौन सा एप्लिकेशन? एक्सेल, एक्सेस ..? – Fionnuala

+0

आप वर्तमान आईई के साथ कैसे जुड़े हुए हैं? यह महत्वपूर्ण है कि 1 से अधिक आईई विंडोज़ खुले हैं या नहीं। क्या आप कैप्शन के आधार पर आईई के साथ बाध्यकारी हैं? हमें और कोड दिखा रहा है वास्तव में मदद करेगा। यदि आप कोड को सभी आईई विंडोज़ से यूआरएल प्राप्त करना चाहते हैं तो आप माइक्रोसॉफ़्ट इंटरनेट कंट्रोल के लिए एक संदर्भ सेट कर सकते हैं और फिर आप 'शैलविंडोज़' का उपयोग कर सभी आईई विंडोज़ के माध्यम से लूप कर सकते हैं। एक बार जब आप विंडो प्राप्त कर लें, तो पता प्राप्त करने के लिए बस 'locationURL' का उपयोग करें। –

उत्तर

6

मान लिया जाये कि आप पहले से ही IE विंडो की पहचान की है, जो अपने आप में एक छोटे से अधिक जटिल है - मैं कर सकते हैं इस पर विस्तार से बता अगर जरूरत:

Dim ieIEWindow As SHDocVw.InternetExplorer 
Dim sIEURL As String 

'Set your IE Window 

sIEURL = ieIEWindow.LocationURL 

IE विंडो पाने के लिए आपको संदर्भित करने के लिए की आवश्यकता होगी Microsoft Internet Controls लाइब्रेरी (ieframe.dll) वीबीए संपादक में Tools =>References... पर जाकर और सूची से इसे चुनकर। यदि वह आइटम उपलब्ध नहीं है, तो मेरे लिए .dll फ़ाइल C:\Windows\System32\ieframe.dll पर स्थित है।

एक बार संदर्भ सेट होने के बाद, आपको अपने कोड में तथाकथित SHDocVw लाइब्रेरी तक पहुंच होगी।

Public Function GrabIEWindow() As SHDocView.InternetExplorer 

Dim swShellWindows As New SHDocVw.ShellWindows 
Dim ieOpenIEWindow As SHDocVw.InternetExplorer 

    Set GrabIEWindow = Nothing 

    ' Look at the URLs of any active Explorer windows 
    ' (this includes WINDOWS windows, not just IE) 
    For Each ieOpenIEWindow In objShellWindows 

     ' Check the I.E. window to see if it's pointed 
     ' to a web location (http) 
     If Left$(ieOpenIEWindow.LocationURL, 4) = "http" Then 
      ' If so, set this window as the one to use. 
      ' This will need to be modified to create 
      ' a list if you want to select from more 
      ' than one open window 

      ' Optional grab the HWND for later reference... 
      Dim lWindowID As Long 
      lWindowID = ieOpenIEWindow.HWND 

      Set GrabIEWindow = ieOpenIEWindow 

      Exit Function 
     End If 

    Next OpenIEWindow 

End Function 

ऊपर भी संशोधित किया जा सकता एक चयन के लिए अनुमति देने के लिए:

आप IE विंडो (यह मानते हुए केवल एक ही खुला) का उपयोग कर (अपरीक्षित, संशोधित/अपने ही काम कर कोड से घटाकर) निम्नलिखित प्राप्त कर सकते हैं कई खुली आईई विंडोज़ के।

+0

+ 1 Yup यदि केवल एक विंडो खुलती है या आईई विंडो की पहचान की जाती है। –

+0

@ सिद्धार्थ रूट मैं इस तरह के स्वचालन का दैनिक आधार पर उपयोग करता हूं और इसे पूरा करने के लिए कुछ गंदे लेकिन प्रभावी उपकरण विकसित करता हूं। (फॉर्म जो सभी उपलब्ध विंडोज़ सूचीबद्ध करता है, उपयोगकर्ता चुनता है, सत्र तब एचडब्ल्यूएनडी से बांधता है, कुछ मामलों में खिड़की अभी भी खुली है, आदि) – Gaffi

+0

कुल :) आप अपनी पोस्ट में संशोधन करना चाहते हैं और जोड़ सकते हैं कि उपयोगकर्ता को जोड़ने की जरूरत है माइक्रोसॉफ़्ट इंटरनेट नियंत्रण के संदर्भ में? –

2

अरे! यह मुझे मेरे vb6 दिनों की याद दिलाता है :)

ठीक है मेरे पास यह है। यदि 1 से अधिक आईई विंडोज़ हैं तो यह अंतिम सक्रिय (वर्तमान) ले जाएगा) आईई विंडो अन्य अगर केवल एक खिड़की है तो यह ले जाएगा।

'~~> Set a reference to Microsoft Internet Controls 

'~~> The GetWindow function retrieves the handle of a window that has 
'~~> the specified relationship (Z order or owner) to the specified window. 
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, _ 
ByVal wCmd As Long) As Long 

'~~> The GetForegroundWindow function returns the handle of the foreground 
'~~> window (the window with which the user is currently working). 
Private Declare Function GetForegroundWindow Lib "user32"() As Long 

Sub GetURL() 
    Dim sw As SHDocVw.ShellWindows 
    Dim objIE As SHDocVw.InternetExplorer 
    Dim topHwnd As Long, nextHwnd As Long 
    Dim sURL As String, hwnds As String 

    Set sw = New SHDocVw.ShellWindows 

    '~~> Check the number of IE Windows Opened 
    '~~> If more than 1 
    hwnds = "|" 
    If sw.Count > 1 Then 
     '~~> Create a string of hwnds of all IE windows 
     For Each objIE In sw 
      hwnds = hwnds & objIE.hwnd & "|" 
     Next 

     '~~> Get handle of handle of the foreground window 
     nextHwnd = GetForegroundWindow 

     '~~> Check for the 1st IE window after foreground window 
     Do While nextHwnd > 0 
      nextHwnd = GetWindow(nextHwnd, 2&) 
      If InStr(hwnds, "|" & nextHwnd & "|") > 0 Then 
       topHwnd = nextHwnd 
       Exit Do 
      End If 
     Loop 

     '~~> Get the URL from the relevant IE window 
     For Each objIE In sw 
      If objIE.hwnd = topHwnd Then 
       sURL = objIE.LocationURL 
       Exit For 
      End If 
     Next 
    '~~> If only 1 was found 
    Else 
     For Each objIE In sw 
      sURL = objIE.LocationURL 
     Next 
    End If 

    Debug.Print sURL 

    Set sw = Nothing: Set objIE = Nothing 
End Sub 

नोट: मैं किसी भी त्रुटि हैंडलिंग नहीं किया है। मुझे यकीन है कि आप इसका ख्याल रख सकते हैं;)

+0

यह मेरी विधियों से काफी अलग है! मैं कुछ बाहरी डीएल संदर्भों का उपयोग करता हूं, लेकिन केवल पृष्ठों में हेरफेर करने के लिए (यानी एकाधिक के बीच आगे और आगे कूदें)। आप 'sw.Count = 1' को कैसे संभालेंगे जब एकमात्र विंडो में एक गैर-http पथ होता है, क्योंकि एक विंडो एक मानक विंडोज फ्रेम हो सकता है (यानी' मेरा कंप्यूटर')? – Gaffi

+0

जैसा मैंने बताया है मैंने किसी भी त्रुटि प्रबंधन को शामिल नहीं किया है। 'बाएं $ (यानी ओपनआईविंडो 'का उपयोग करना।LocationURL, 4) = "http" जैसा आपने किया है, मेरा अगला कदम होगा लेकिन मैं वास्तविक पते वाले 3 मान्य आईई विंडोज़ के साथ परीक्षण कर रहा था। :) इसे 1 से अधिक आईई विंडो के साथ आज़माएं और देखें कि आपको कौन सी यूआरएल मिलती है? –

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