Что нового

[Элементы GUI] Как получить Handle озданного объекта IE ?

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Имеются созданный объект и его ID :
Код:
$oIE = _IECreateEmbedded ()
$GUIActiveX = GUICtrlCreateObj($oIE,   0,0,200,200)

Можно получить Handle по его ID?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
gregaz
Control Viewer нашел 3 элемента. Я не знаю, какой из них нужен.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

_IEErrorHandlerRegister()

$oIE = _IECreateEmbedded()
$hGui = GUICreate("Embedded Web control Test", 640, 580, _
		(@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, _
		$WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
$GUIActiveX = GUICtrlCreateObj($oIE, 10, 40, 600, 360)
$GUI_Button_Back = GUICtrlCreateButton("*click*", 10, 420, 100, 30)
GUISetState()
_IENavigate($oIE, "http://www.autoitscript.com")

While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			ExitLoop
		Case $msg = $GUI_Button_Back
			MsgBox(64, 1 & '-' & $GUIActiveX, 'Internet Explorer_Server: ' & ControlGetHandle($hGui, '', '[CLASS:Internet Explorer_Server; INSTANCE:1]'))
			MsgBox(64, 2 & '-' & $GUIActiveX, 'Shell Embedding: ' & ControlGetHandle($hGui, '', '[CLASS:Shell Embedding; INSTANCE:1]'))
			MsgBox(64, 3 & '-' & $GUIActiveX, 'Shell DocObject View: ' & ControlGetHandle($hGui, '', '[CLASS:Shell DocObject View; INSTANCE:1]'))
	EndSelect
WEnd
GUIDelete()
Exit
 
Автор
G

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
madmasles [?]
Control Viewer нашел 3 элемента.
Спасибо. Через Class то я нахожу .
А нужно по его ID
Или определить класс кодом , а не через Control Viewer.

Имеется массив созданных элементов, среди которых есть и объекты
Требуется найти индекс активного элемента в массиве

Handle активного элемента я нахожу.
А индекс массива - не могу,т.к. часть элементов задана своим ID, а не Handle
Вот здесь и требуется Handle объекта
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
gregaz [?]
Или определить класс кодом
Может, так:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <Array.au3>
#include <WinAPIEx.au3>

_IEErrorHandlerRegister()

$oIE = _IECreateEmbedded()
$hGui = GUICreate("Embedded Web control Test", 640, 580, _
		(@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, _
		$WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
$GUIActiveX = GUICtrlCreateObj($oIE, 10, 40, 600, 360)
$GUI_Button_Back = GUICtrlCreateButton("*click*", 10, 420, 100, 30)
GUISetState()
_IENavigate($oIE, "http://www.autoitscript.com")

While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			ExitLoop
		Case $msg = $GUI_Button_Back
			$aData = _WinAPI_EnumChildWindows($hGui)
			ReDim $aData[$aData[0][0] + 1][3]
			For $i = 1 To $aData[0][0]
				$aData[$i][2] = _WinAPI_GetDlgCtrlID($aData[$i][0])
			Next
			_ArrayDisplay($aData, ControlGetFocus($hGui))
	EndSelect
WEnd
GUIDelete()
Exit
У меня не хочет определять ID у классов Shell Embedding, Shell DocObject View и Internet Explorer_Server.
 
Автор
G

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Придется при создании объекта сразу получать Handle,
увеличивая INSTANCE класса на 1.
Хотя должно же быть корректное решение.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
gregaz [?]
Придется при создании объекта сразу получать Handle
Handle чего и как? Handle $GUIActiveX у меня никак не получается получить.
Если в моем скрипте закомментировать строку с _IENavigate(), то выдаст только 1 элемент, не имеющий ID - Shell Embedding. В противном случае - 3 элемента, также не имеющие ID. В справке что-то написано про GUICtrlCreateObj(), но google непонятно (для меня) переводит, а с английским я не дружу. :(
 
Автор
G

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
gregaz [?]
Придется при создании объекта сразу получать Handle,
Я имел ввиду искусственно находить Handle для окна создаваемого класса с увеличением INSTANCE
madmasles [?]
Если в моем скрипте закомментировать строку с _IENavigate(), то выдаст только 1 элемент, не имеющий ID - Shell Embedding.
Да не получилось, это- не выход. там дальше появляются еще новые заморочки ...
 
Верх