如何从IE获取活动URL? [英] How to get active URL form IE ?

查看:92
本文介绍了如何从IE获取活动URL?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,

我做了一个代码来从IE浏览器获取活动网址。

Hello,
I did a code to get the active url from IE browser.

Public Class Form2
    Private Function GetBrowser(ByVal appName) As System.Diagnostics.Process

        Dim plist As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName(appName)
        'Dim remoteByName As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName(appName)
        For Each proc As System.Diagnostics.Process In plist
            For i As Integer = 1 To plist.Length

                If proc.ProcessName = appName Then
                    Return proc
                End If

            Next
        Next
        Return Nothing
    End Function

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim appName As String = "iexplore"
        Dim proc As System.Diagnostics.Process = GetBrowser(appName)
        If proc IsNot Nothing Then
            Dim browserName As String = "Windows Internet Explorer"
            Dim className As String = "Edit"
            Dim Label1 As String = "Label1"
            Dim curl As New currenturl1()
            Dim s As String = curl.GetCurrentUrl(proc.MainWindowHandle, browserName, className, Label1)
            If s <> "" Then
                MessageBox.Show(s)
            Else
                MessageBox.Show("url not found")
            End If
        Else

        End If

    End Sub
End Class





我做了一个class来调用函数GetCurrentUrl,这是






And I make a class to call the function GetCurrentUrl, which is


Imports System.Text
Imports System.Runtime.InteropServices.Marshal

'Option Explicit On


Public Class currenturl1


#Region " Overview & References "
    'Overview:
    'Function GetCurrentUrl returns the URL of the selected browser (IE or Chrome; Firefox to be added). 
    'Most of the code is based on the references listed below, but this function starts with
    'the browser's main window handle and returns only 1 URL. 
    'It also builds a simple "treeview" of the windows up to the target window's classname.

    'References: 
    'http://www.xtremevbtalk.com/archive/index.php/t-129988.html
    'http://social.msdn.microsoft.com/forums/en-us/vbgeneral/thread/321D0EAD-CD50-4517-BC43-29190542DCE0
    'http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/02a67f3a-4a26-4d9a-9c67-0fdff1428a66

#End Region

#Region " Declares, Constants, and Variables"
    Private Delegate Function EnumProcDelegate(ByVal hwnd As IntPtr, ByVal lParam As IntPtr) As Boolean 'Delegate added
    Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As EnumProcDelegate, ByVal lParam As IntPtr) As Boolean
    Private Declare Auto Function GetWindowText Lib "user32" (ByVal hWnd As IntPtr, ByVal lpString As StringBuilder, ByVal nMaxCount As Integer) As Integer
    Private Declare Function GetWindow Lib "user32" (ByVal hwnd As IntPtr, ByVal wCmd As IntPtr) As IntPtr
    Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As IntPtr, ByVal lpClassName As String, ByVal nMaxCount As Integer) As Integer
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As IntPtr, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer

    Private Const WM_GETTEXT = &HD
    Private Const WM_GETTEXTLENGTH = &HE

    Private Const GW_CHILD = 5
    Private Const GW_HWNDNEXT = 2
    Private Const GW_HWNDFIRST = 0

    Private sURL As String 'String that will contain the URL
    Private cbWindows As String 'Treeview" 
    Private sIndent As String 'Spaces
    Private sBrowser As String 'Starting window (IE or Chrome)
    Private sClassName As String = "Edit" 'Default
#End Region

    Public Function GetCurrentUrl(ByVal hwnd As IntPtr, ByVal browser As String, ByVal classname As String, ByVal combo As String) As String
        sBrowser = browser
        sClassName = classname
        cbWindows = combo
        If cbWindows IsNot Nothing Then
            If cbWindows.GetType.Name = "Label1" Then
                ' cbWindows.Items.Clear()
            Else
                cbWindows = Nothing
            End If
        End If
        sURL = ""
        sIndent = ""
        EnumWindows(AddressOf EnumProc, hwnd) 'hwnd - originally IntPtr.Zero
        Return sURL
    End Function

    ' Enumerate the windows
    ' Find the URL in the browser window 
    Private Function EnumProc(ByVal hWnd As IntPtr, ByVal lParam As IntPtr) As Boolean
        Dim buf As StringBuilder = New StringBuilder(256) 'String * 1024
        Dim title As String
        Dim length As Integer

        ' Get the window's title.
        length = GetWindowText(hWnd, buf, buf.Capacity)
        title = Left(buf.ToString, length)

        ' See if the title ends with the browser name 
        Dim s As String = "Internet Explorer"
        Dim inprivate = sBrowser & " - [InPrivate]"  'IE adds this to the window title
        If title <> "" Then
            'If (Right(title, s.Length) = s) Or (Right(title, inprivate.Length) = inprivate) Then
            '    ' This is it. Find the URL information.
            'sURL = EditInfo(hWnd, cbWindows)
            'Return False
            'End If
            If (title.Contains(s)) Then
                ' This is it. Find the URL information.
                sURL = EditInfo(hWnd, cbWindows)
                Return False
            End If
        End If
        'Continue searching
        Return True

    End Function

    ' If this window is of the Edit class (IE) or Chrome_AutocompleteEditView (Google), return its contents. 
    ' Otherwise search its children for such an object.
    Private Function EditInfo(ByVal window_hwnd As IntPtr, ByRef cbWindows As String) As String
        Dim txt As String = ""
        Dim buf As String
        Dim buflen As Integer
        Dim child_hwnd As IntPtr
        Dim children() As IntPtr = {}
        Dim num_children As Integer
        Dim i As Integer

        'Get the class name.
        buflen = 256
        buf = Space(buflen - 1)
        buflen = GetClassName(window_hwnd, buf, buflen)
        buf = Left(buf, buflen)

        'Add an item to the window list combo, indent as required
        If cbWindows IsNot Nothing Then
            'cbWindows.Items.Add(sIndent & buf)
        End If
        ' See if we found an Edit/AutocompleteEditView object.
        If buf = sClassName Then
            Return WindowText(window_hwnd)
        End If


        ' It's not an Edit/AutocompleteEditView object. Search the children.
        ' Make a list of the child windows.
        num_children = 0
        child_hwnd = GetWindow(window_hwnd, GW_CHILD)
        While child_hwnd <> 0
            num_children = num_children + 1
            ReDim Preserve children(0 To num_children) 'was 1 to ..
            children(num_children) = child_hwnd
            child_hwnd = GetWindow(child_hwnd, GW_HWNDNEXT)
        End While

        ' Get information on the child windows.
        sIndent &= "    "
        For i = 1 To num_children
            txt = EditInfo(children(i), cbWindows)
            If txt <> "" Then Exit For
        Next i
        sIndent = Left(sIndent, sIndent.Length - 4)

        Return txt
    End Function

    ' ************************************************
    ' Return the text associated with the window.
    ' ************************************************
    Private Function WindowText(ByVal window_hwnd As IntPtr) As String
        Dim txtlen As Integer
        Dim txt As String

        txt = "" 'WindowText = ""
        If window_hwnd = 0 Then Return "" 'Exit Function

        'Get the size of the window text
        txtlen = SendMessage(window_hwnd, WM_GETTEXTLENGTH, 0, 0)
        If txtlen = 0 Then Return "" 'Exit Function

        'Extra for terminating char
        txtlen = txtlen + 1

        'Alloc memory for the buffer that recieves the text
        Dim buffer As IntPtr = AllocHGlobal(txtlen)

        'Send The WM_GETTEXT Message
        txtlen = SendMessage(window_hwnd, WM_GETTEXT, txtlen, buffer) 'byval txt 

        'Copy the characters from the unmanaged memory to a managed string
        txt = PtrToStringAnsi(buffer)
        Return Left(txt, txtlen)
    End Function

End Class



但我在这里遇到的问题是它有时会返回网址,有时不是。所以我需要在代码中进行更改。很急,请帮帮我。



谢谢,


But I am getting an issue here is that it sometimes returning the url and sometimes not. So what I need to change in the code. Its urgent, please help me.

Thanks,

推荐答案

HttpRequest.RawUrl Property

看看这个
HttpRequest.RawUrl Property
check out this one


这篇关于如何从IE获取活动URL?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆