Что нового

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

gregaz

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

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

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
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,320
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,320
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.

Да не получилось, это- не выход. там дальше появляются еще новые заморочки ...
 
Верх