Что нового

Новые окна в Shell.Explorer.2

blacklis

Новичок
Сообщения
64
Репутация
1
Добрый день!
Возник такой вопрос.
Используя в гуи Shell.Explorer.2
Код:
$oIE = ObjCreate("Shell.Explorer.2")
$Gui = GUICreate($winname, 1200, 735, -1, -1)
$GUIActiveX = GUICtrlCreateObj($oIE, 1, 1, 1200, 730)
GUISetState()
$oIE.navigate("http://")

Создаётся окошко с браузером, но если кликнуть в нём на какую-либо ссылку, которая открывает новое окно, то открывается окно в IE. Как сделать, чтобы при клике окно открывалось в гуи в той же вкладке,а не в IE?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
blacklis
Делается так:
Когда создается новое окно, то браузер остылает об этом уведомление. В скрипте, подписываемся на это событие. Когда событие наступает, то отменяем создание нового окна.
и делаем простую навигацию по URL.

Но возможность обрабатывать ByRef параметры в функциях событий появилась только в последних бетах (В 3.3.9.21 точно есть.). Так что если вы не пользуетесь бета версиями то по другому, имхо, не сделаете.

Вот что я имею ввиду:
Код:
$Form1 = GUICreate("Отмена создания новых окон", 788, 541, 192, 124)
$oIE = ObjCreate("Shell.Explorer.2")
$oIE.navigate('about:blank')
GUICtrlCreateObj($oIE, 0, 0, 788, 541)
$oEvent = ObjEvent($oIE, "_IEEvent_", "DWebBrowserEvents2")
GUISetState(@SW_SHOW)

$oIE.navigate('http://google.com/')

Do
Until GUIGetMsg() = -3

$oIE.quit()
$oEvent.stop()

Volatile Func _IEEvent_NewWindow3(ByRef $ppDisp, ByRef $Cancel,$dwFlags,$bstrUrlContext,$bstrUrl)
	$Cancel = True
	$oIE.navigate($bstrUrl)
EndFunc


Попробуйте открыть любую ссылку в новом окне. Должно вызваться событие NewWindow3, где оно сразу отменяется $Cancel = True и делается простой переход $oIE.navigate($bstrUrl) в текущем окне.

Доступно в Windows XP Service Pack 2 (SP2) или новее
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
blacklis [?]
Используя в гуи

Предупреждение За нарушение общих правил (пункт В.8):
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, ваш Глобальный модератор.
 
Верх