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)