Что нового

Определение Handle и Сlass флеш приложения на веб странице

NoMad73rus

Продвинутый
Сообщения
124
Репутация
80
Работая с флеш приложениями, многие сталкиваются с проблемой определения хендла приложения. Стандартная процедура через ControlGetHandle ( "title", "text", controlID ) не всегда работает, потому, что в зависимости от количества флеш элементов на странице, класс нужного нам приложения меняется(MacromediaFlashPlayerActiveX1, MacromediaFlashPlayerActiveX2, MacromediaFlashPlayerActiveX...nn...). А флеш банеры часто появляются и исчезают на одной и той же странице, не давая тем самым определить класс раз и навсегда, не говоря уж о том, что для разных браузеров классы разные.
Изначально для обхода этой проблемы я использовал физический клик мышью(т.е. на какое то время скрипт овладевал грызуном), что я считал не совсем приемлемым. Предлагаю вашему вниманию функцию, которая возвращает массив содержащий класс и хендл искомого приложения, используя для этого титл и размер элемента(не думаю что на оной странице будет несколько флешек одинакового размера).

Код:
Func _getControlsId($titl, $xSize, $ySize $flag=0)
	Local $ctrl_list = _WinAPI_EnumChildWindows(WinGetHandle($titl), 0), $return[2]
	If IsArray($ctrl_list) Then
		For $i = 1 To $ctrl_list[0][0]
			$hPos = ControlGetPos('','',$ctrl_list[$i][0])
			If $hPos[2] = $xSize And $hPos[3] = $ySize Then
				Local $NN = 1
				For $ii = 1 To $ctrl_list[0][0]
					If $ctrl_list[$ii][1] = $ctrl_list[$i][1] Then
						If $ctrl_list[$ii][0] = $ctrl_list[$i][0] Then ExitLoop
						$NN += 1
					EndIf
				Next
				$return[0] = $ctrl_list[$i][1]&$NN
				$return[1] = $ctrl_list[$i][0]
                Return $return
			EndIf
		Next
	EndIf
EndFunc

Надеюсь кому то пригодиться ))
 

bistriy

Новичок
Сообщения
22
Репутация
0
Чем можно измерить длину и ширину флеш окна на странице ?
 
Верх