有一个程序的窗体中有个Webbrowser控件,现在已经得到了这个控件的句柄,请问有没有什么方法可以取得这个控件中的内容,或者控制它执行相应的操作.
比如说在这个Webbrowser控件中显示了3个超链接(或者3个Button,主要是超链接),我需要点其中一个指定的,请问有什么方法可以实现吗?

解决方案 »

  1.   

    回aspower_(楼主做人要厚道 完事记得给分!我知道楼下就欣赏偶的分):
    程序不是自己的.
      

  2.   

    http://www.experts-exchange.com/Programming/Programming_Languages/Visual_Basic/Q_21821922.html
      

  3.   

    帮你把代码贴出来:Option ExplicitPrivate Type UUID
        Data1 As Long
        Data2 As Integer
        Data3 As Integer
        Data4(0 To 7) As Byte
    End TypePrivate Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" ( _
            Destination As Any, _
            ByVal Length As Long)Private Declare Function FindWindowA Lib "user32" ( _
            ByVal lpClassName As String, _
            ByVal lpWindowName As Long) As LongPrivate Declare Function FindWindowExA Lib "user32" ( _
            ByVal hWnd1 As Long, _
            ByVal hWnd2 As Long, _
            ByVal lpsz1 As String, _
            ByVal lpsz2 As Long) As LongPrivate Declare Function ObjectFromLresult Lib "oleacc" ( _
            ByVal lResult As Long, _
            riid As UUID, _
            ByVal wParam As Long, _
            ppvObject As Any) As LongPrivate Declare Function RegisterWindowMessageA Lib "user32" ( _
            ByVal lpString As String) As LongPrivate Declare Function SendMessageTimeoutA Lib "user32" ( _
            ByVal hwnd As Long, _
            ByVal Msg As Long, _
            ByVal wParam As Long, _
            lparam As Any, _
            ByVal fuFlags As Long, _
            ByVal uTimeout As Long, _
            lpdwResult As Long) As LongPrivate Declare Function EnumWindows Lib "user32" ( _
            ByVal lpEnumFunc As Long, _
            lparam As Long) As BooleanPrivate Declare Function RealGetWindowClassA Lib "user32" ( _
            ByVal hwnd As Long, _
            ByVal psztype As String, _
            ByVal cchtype As Long) As LongPrivate Declare Function ShellExecuteA Lib "shell32.dll" ( _
            ByVal hwnd As Long, _
            ByVal lpOperation As String, _
            ByVal lpFile As String, _
            ByVal lpParameters As String, _
            ByVal lpDirectory As String, _
            ByVal nShowCmd As Long) As LongPrivate Declare Sub Sleep Lib "kernel32" ( _
            ByVal dwMilliseconds As Long)'// FindWindow args
    Private Const arg  As String = "ieframe"
    Private Const arg1 As String = "shell docobject view"
    Private Const arg2 As String = "Internet Explorer_Server"'// GetObject args
    Private Const WM_HTML_GETOBJECT As String = "WM_HTML_GETOBJECT"Private HTML    As HTMLDocument
    Dim Handle      As Long
    Dim IsIE        As StringPublic Sub doLogin()
        IsIE = vbNullString
        IsIE = Space$(10)
        EnumWindows AddressOf Frames, 0
    End SubPublic Sub GoWeb(ByVal address As String, Optional Timeout As Long)
        ShellExecuteA 0, "open", address, "", vbNullString, 1
        Sleep Timeout
    End SubPublic Function Generate(ByVal hwnd As Long) As IHTMLDocument
        
        Dim ID     As UUID
        Dim lngReg As Long
        Dim lngHnD As Long
        
        lngHnD = RegisterWindowMessageA(WM_HTML_GETOBJECT)
        
        With ID
            .Data1 = &H626FC520
            .Data2 = &HA41E
            .Data3 = &H11CF
            .Data4(0) = &HA7
            .Data4(1) = &H31
            .Data4(2) = &H0
            .Data4(3) = &HA0
            .Data4(4) = &HC9
            .Data4(5) = &H8
            .Data4(6) = &H26
            .Data4(7) = &H37
        End With
        
        Call SendMessageTimeoutA(hwnd, lngHnD, 0, 0, &H2, 2000, lngReg)
        Call ZeroMemory(ID, Len(ID))
        Call ObjectFromLresult(lngReg, ID, 0, Generate)End FunctionPrivate Sub SetObjData( _
        var As Variant, _
        var1 As Variant, _
        btn As Variant, _
        user As String, _
        pass As String)
        
        Set HTML = Generate(Handle)
            HTML.documentElement.All(var).Value = user
            HTML.documentElement.All(var1).Value = pass
            HTML.documentElement.All(btn).Click
        Set HTML = Nothing
        
    End SubPublic Function Frames( _
        ByVal hwnd As Long, _
        ByVal lparam As Long) As Boolean
        
        On Error Resume Next
        
        Call RealGetWindowClassA(hwnd, ByVal IsIE, Len(IsIE))
        
        If InStr(1, IsIE, arg, vbTextCompare) > 0 Then
            
            Handle = FindWindowExA(hwnd, 0, arg1, 0)
            Handle = FindWindowExA(Handle, 0, arg2, 0)
            
            'TODO:
            'edit to your specifications(username and pass) etc.
            SetObjData "email", "passwd", "null", "myusername", "mypassword"
            
        End If
        
        Frames = True
        
    End Function
      

  4.   

    调用:    Dim xDoc As IHTMLDocument
           
        Set xDoc = Generate(hwnd)其中hwnd是窗口句柄。
      

  5.   

    我把他源代码试了下
    只能打开gmail窗口 登陆不了.......
      

  6.   

    谢谢各位老师的指导,尤其是谢谢TechnoFantasy((VB MVP)www.applevb.com)老师提供的代码,尽管还没有试是否可行,但是代码可参考的价值却很大.
    谢谢各位了!