如何实现从hwnd获得webbrowser组件

Option Explicit

Private Type UUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type

Private Declare Sub ZeroMemory()Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" ( _
        Destination As Any, _
        ByVal Length As Long)

Private Declare Function FindWindowA()Function FindWindowA Lib "user32" ( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As Long) As Long

Private Declare Function FindWindowExA()Function FindWindowExA Lib "user32" ( _
        ByVal hWnd1 As Long, _
        ByVal hWnd2 As Long, _
        ByVal lpsz1 As String, _
        ByVal lpsz2 As Long) As Long

Private Declare Function ObjectFromLresult()Function ObjectFromLresult Lib "oleacc" ( _
        ByVal lResult As Long, _
        riid As UUID, _
        ByVal wParam As Long, _
        ppvObject As Any) As Long

Private Declare Function RegisterWindowMessageA()Function RegisterWindowMessageA Lib "user32" ( _
        ByVal lpString As String) As Long

Private Declare Function SendMessageTimeoutA()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 Long

Private Declare Function EnumWindows()Function EnumWindows Lib "user32" ( _
        ByVal lpEnumFunc As Long, _
        lparam As Long) As Boolean

Private Declare Function RealGetWindowClassA()Function RealGetWindowClassA Lib "user32" ( _
        ByVal hwnd As Long, _
        ByVal psztype As String, _
        ByVal cchtype As Long) As Long

Private Declare Function ShellExecuteA()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 Long

Private Declare Sub Sleep()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 String

Public Sub doLogin()Sub doLogin()
    IsIE = vbNullString
    IsIE = Space$(10)
    EnumWindows AddressOf Frames, 0
End Sub

Public Sub GoWeb()Sub GoWeb(ByVal address As String, Optional Timeout As Long)
    ShellExecuteA 0, "open", address, "", vbNullString, 1
    Sleep Timeout
End Sub

Public Function Generate()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))

 


    
    '从句柄获得webbrowser对象
    Call ObjectFromLresult(lngReg, ID, 0, Generate)

End Function 

 

调用的方法:
    Dim xDoc As IHTMLDocument
      
    Set xDoc = Generate(hwnd)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值