Добрый день.
Нашел следующую WinApi функцию: AccessibleObjectFromWindow. Как можно ее закрутить, что бы добраться до DOM-структуры IE модального окна??
Вот ее описание:
Declare Function AccessibleObjectFromWindow Lib "oleacc" _
(ByVal hWnd As Long, ByVal dwId As Long, _
riid As tGUID, ppvObject As Object) As Long
Нашел пример на Visual Basic. Как теперь это все переписать на VBScript??
Option Explicit
Private Type UUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "User32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function ObjectFromLresult Lib "oleacc" (ByVal lResult As Long, riid As UUID, ByVal wParam As Long, ppvObject As Any) As Long
Private Declare Function RegisterWindowMessage Lib "User32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long
Private Declare Function SendMessageTimeout Lib "User32" Alias "SendMessageTimeoutA" (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 GetClassName Lib "User32" (ByVal hwnd As _
Integer, ByVal lpClassName As String, ByVal nMaxCount As _
Integer) As Integer
Private Declare Function GetWindowText Lib "User32" Alias "GetWindowTextA" (ByVal hwnd As _
Integer, ByVal lpString As String, ByVal aint As Integer) As _
Integer
Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Private Const SMTO_ABORTIFHUNG = &H2
Public WithEvents objDoc As HTMLDocument
' Create a web document object to control browser
'Private mhtmDoc3 As IHTMLDocument3
'Private WithEvents objDoc As HTMLDocument
Dim FocusHwnd As Long
Dim CurrentFocusWindowTitle As String * 255
Dim LastFocusWindowTitle As String * 255
Dim mx, my
Private Sub Command1_Click()
Dim hwnd As Long
'"coozzzzz - coozzzzz" is the title of the IM window
hwnd = FindWindow("IEFrame", CurrentFocusWindowTitle)
hwnd = FindWindowEx(hwnd, 0, "Shell DocObject View", vbNullString)
hwnd = FindWindowEx(hwnd, 0, "Internet Explorer_Server", vbNullString)
If hwnd > 0 Then
Set objDoc = WindowDOM(hwnd)
If Not (objDoc Is Nothing) Then
Text1.Text = objDoc.body.innerText
LastFocusWindowTitle = CurrentFocusWindowTitle
End If
End If
End Sub
Private Function WindowDOM(ByVal hwnd As Long) As IHTMLDocument
Dim typUUID As UUID, lngRes As Long, lngMsg As Long
lngMsg = RegisterWindowMessage("WM_HTML_GETOBJECT")
If lngMsg <> 0 Then
Call SendMessageTimeout(hwnd, lngMsg, 0, 0, SMTO_ABORTIFHUNG, 1000, lngRes)
If lngRes <> 0 Then
With typUUID
.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 ObjectFromLresult(lngRes, typUUID, 0, WindowDOM)
End If
End If
End Function
Private Sub Timer1_Timer()
Dim a As Long
FocusHwnd = GetForegroundWindow
a = GetWindowText(FocusHwnd, CurrentFocusWindowTitle, Len(CurrentFocusWindowTitle))
If (CurrentFocusWindowTitle <> LastFocusWindowTitle) Then
Command1_Click
End If
End Sub