如何实现从hwnd获得webbrowser组件

本文介绍了一个使用VBA进行IE浏览器自动化的示例代码,包括窗口查找、发送消息及获取网页元素等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值