Как зная hWnd открытого IE окна получить HTML код страницы?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
IvanTheTerrible
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 94
Зарегистрирован: 20.07.2005 (Ср) 11:47
Откуда: Moscow

Как зная hWnd открытого IE окна получить HTML код страницы?

Сообщение IvanTheTerrible » 20.07.2005 (Ср) 11:55

Попытался разобраться с опубликованной на сайте статьей "Программирование для Internet Explorer".
Результат плачевный. Предложенный в статье способ у меня не работает.
Подскажите, что/как делать?

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 20.07.2005 (Ср) 14:47

Что именно не работает? Вроде как в статье все логично... Вопрос не понятен - конкретизируй проблему.
То, что для одних константа, для других только переменная...

IvanTheTerrible
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 94
Зарегистрирован: 20.07.2005 (Ср) 11:47
Откуда: Moscow

Сообщение IvanTheTerrible » 20.07.2005 (Ср) 15:06

Ошибки возникают в

Function IEDOMFromhWnd(ByVal hwnd As Long) As IHTMLDocument
Dim IID_IHTMLDocument As UUID
Dim hWndChild As Long,lRes As Long,lMsg As Long,hr As Long

If hwnd <> 0 Then
If Not IsIEServerWindow(hwnd) Then
EnumChildWindows hwnd, AddressOf EnumChildProc, hwnd
End If

' В авторской версии функция IsIEServerWindow не изменяет hwnd.
' Какой тогда смысл ее вызова?

If hwnd <> 0 Then
lMsg = RegisterWindowMessage("WM_HTML_GETOBJECT")
SendMessageTimeout hwnd, lMsg, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes
If lRes Then
With IID_IHTMLDocument
.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

' В следующей строке у меня возникает <Type mismatch>

hr = ObjectFromLresult(lRes, IID_IHTMLDocument, 0, IEDOMFromhWnd)
End If
End If
End If

IvanTheTerrible
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 94
Зарегистрирован: 20.07.2005 (Ср) 11:47
Откуда: Moscow

Я тут покопался в коде и вот к чему пришел.

Сообщение IvanTheTerrible » 22.07.2005 (Пт) 10:52

Следующая ф-ия не работает. Почему не знаю. Может у кого есть соображения на этот счет?

Public Function IEDocumentFromhWnd(ByVal hWnd As Long) As IHTMLDocument
Dim lRes As Long, lMsg As Long

If hWnd <> 0 Then
If Not IsIEServerWindow(hWnd) Then
EnumChildWindows hWnd, AddressOf EnumChildProc, hWnd
End If

' New_hWnd - найденный handle элемента "Internet Explorer_Server"
' в открытом IE-окне

If New_hWnd <> 0 Then
' Следующая строка представляется подозрительной.
' В APIViewer 2004 представлена уйма констант.
' WM_HTML_GETOBJECT среди них нет. А раз так,
' то SendMessageTimeout будет возвращать черти-что...

lMsg = RegisterWindowMessage("WM_HTML_GETOBJECT")
SendMessageTimeout New_hWnd, lMsg, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes

' Следующая строка возвращает Nothing для
' IEDocumentFromhWnd !!!

ObjectFromLresult lRes, New_hWnd, 0, IEDocumentFromhWnd
End If
End If
End Function


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 124

    TopList