Что нового

Работа с Internet Explorer Server в desktop-приложениях

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
На форуме уже поднимались темы по поводу возможности работать с Internet Explorer Server (IES) который используют desktop-приложения.
Вот функция, которая позволяет это сделать.

Функция:

Код:
; #FUNCTION# ====================================================================================================================
; Name...........: _IEGetObjServer
; Description....: Returns handle a COM Object Window reference to an embebedded Webbrowser control
; Syntax.........: _IEGetObjServer($aECW)
; Parameters.....: $aECW - The 2D array of the handles to the child windows and classes for the specified parent window.
;                  example: $aECW = _WinAPI_EnumChildWindows($hWnd)
;
; Return values..: Success - Returns DOM Window object.
;                  Failure - 0 and sets the @error flag to:
;                            1 - Internet Explorer_Server not found
;                            2 - $aECW parameter not array
; Author.........: Garrett
; Modified.......:
; Remarks........: Used in combination with WinAPIEx.au3 and IE.au3. Tested Windows XP SP2 only
; Related........:
; Link...........: WinAPIEx.au3 - http://autoit-script.ru/index.php?topic=47.msg193#msg193
;                  IE.au3 - Standard delivery Autoit
; Example........: Yes
; ===============================================================================================================================

Func _IEGetObjServer($a_ECW)

	Local $o_IES
	If Not IsArray($a_ECW) Then _
		Return SetError(2, 0, 0)
	For $i = 1 To $a_ECW[0][0]
		If $a_ECW[$i][1] = "Internet Explorer_Server" Then
			$o_IES = __IEControlGetObjFromHWND($a_ECW[$i][0])
			If IsObj($o_IES)Then
				Return SetError(0, 0, $o_IES)
			EndIf
		EndIf
	Next
	Return SetError(1, 0, 0)
EndFunc ;==>_IEGetObjServer


Пример: Перед запуском примера запустите "Центр справки и поддержки"

Код:
#Include <WinAPIEx.au3>
#include <IE.au3>

WinActivate("Центр справки и поддержки")
$hWnd = WinGetHandle("Центр справки и поддержки")
$aECW = _WinAPI_EnumChildWindows($hWnd) 
$oIE = _IEGetObjServer($aECW)
If @error Then Exit

; Далее работаем как с обычным объектом.
; Все функции из IE.au3 UDF будут благополучно работать :)

ConsoleWrite(_IEDocReadHTML($oIE))

Func _IEGetObjServer($a_ECW)

	Local $o_IES
	If Not IsArray($a_ECW) Then _
		Return SetError(2, 0, 0)
	For $i = 1 To $a_ECW[0][0]
		If $a_ECW[$i][1] = "Internet Explorer_Server" Then
			$o_IES = __IEControlGetObjFromHWND($a_ECW[$i][0])
			If IsObj($o_IES)Then
				Return SetError(0, 0, $o_IES)
			EndIf
		EndIf
	Next
	Return SetError(1, 0, 0)
EndFunc ;==>_IEGetObjServer
 

HukpoFuJl

AццkuЙ HukpoFuJl
Сообщения
98
Репутация
38
При попытке , например _IENavigate($oIE, 'https://mail.google.com') просто открывается браузер по умолчанию с этой ссылкой =((

PS: Пытаюсь заменить рекламу в скайпе на что-нить полезное...
Код:
#include <Array.au3>
#Include <WinAPIEx.au3>
#include <IE.au3>

$hWnd = WinGetHandle("Skype",'')

If @error Then
    MsgBox(4096, "Error", "Could not find the correct window")
	Exit
EndIf

WinActivate($hWnd)

$aECW = _WinAPI_EnumChildWindows($hWnd) 
$oIE = _IEGetObjServer($aECW)
If @error Then MsgBox(4096, "Error", "_IEGetObjServer error")
	
; _IEBodyWriteHTML($oIE, 'ТырТырТыр') ; Это работает
_IENavigate($oIE, 'https://mail.google.com',0) ; Это не работает :(

ConsoleWrite(@CRLF & _IEDocReadHTML($oIE))





Func _IEGetObjServer($a_ECW)

    Local $o_IES
    If Not IsArray($a_ECW) Then _
        Return SetError(2, 0, 0)
    For $i = 1 To $a_ECW[0][0]
        If $a_ECW[$i][1] = "Internet Explorer_Server" Then
            $o_IES = __IEControlGetObjFromHWND($a_ECW[$i][0])
            If IsObj($o_IES)Then
                Return SetError(0, 0, $o_IES)
            EndIf
        EndIf
    Next
    Return SetError(1, 0, 0)
EndFunc ;==>_IEGetObjServer
 

dstasv

Новичок
Сообщения
45
Репутация
1
Что попросил то и открывает.
А тебе надо подменять их сылку на свою.
Налету хост редактировать)))
 

HukpoFuJl

AццkuЙ HukpoFuJl
Сообщения
98
Репутация
38
dstasv сказал(а):
Что попросил то и открывает.
А тебе надо подменять их сылку на свою.
Налету хост редактировать)))
Тут ключевая фраза у меня "открывается браузер по умолчанию с этой ссылкой".

Я подключаюсь к объекту "Internet Explorer Server", который встроен в скайп и хочу управлять им (собственно этим и занимается библиотека IE.au3). Но по факту этого не выходит =(
Редактировать хост на лету - дофига телодвижений надо...
 

dstasv

Новичок
Сообщения
45
Репутация
1
А это читал в справке?
"Новая безопасность в Windows Vista принуждает создание нового окна браузера, когда браузер получает указание перейти по URL в другой зоне безопасности. Это также происходит с начальным созданием и переходом начатым с _IECreate. Новое окно является новым экземпляром браузера и предыдущая переменная, содержащая объект браузера больше не указывает на него. Есть несколько обходных путей:
1) Добавить #RequireAdmin в свой скрипт (это требуется, даже если учетная запись входит в группу администраторов и запрашивает учетные данные при необходимости.)
2) Используйте _IEAttach для подключения к новому окну браузера
3) Добавить веб-сайт в зону "Надёжные узлы" в IE
4) Выключите "Защищенный режим" в IE
5) Отключите UAC. Необходимо соблюдать осторожность, понимая последствия отключения функций безопасности IE при доступе к ненадёжным сайтам."
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
По моему логично, что навигация происходит в браузере по умолчанию. Вы не находите? Скайп отлавливает все переходы, т.к нажатие на любую ссылку, переданную в разговоре показывала бы вместо чата - посторонний сайт.
 
Верх