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
Надеюсь кому то пригодиться ))