如何实现从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)

你可能感兴趣的:(html)