Что нового

[Мышь, клавиатура] Как привязать координаты к контейнеру флешплеера и определять цвет точек

pgs2

Новичок
Сообщения
29
Репутация
0
Столкнулся с проблемой.
Нужно в флеш - окне игры проверять цвет точек и кликать по точкам , при этом чтоб координаты точек были привязаны именно к флешу, а не к активному окну в котором флеш расположен.
Проблема в том что если координаты точек определения цвета сделать относительными, например с помошью пересчета координат используя:
$koord = ControlGetPos( $title, "", $klassnameNN)
$pos = MouseGetPos() ; тут должны быть массив координат точек
$ColorPos = PixelGetColor ($pos[0] - $koord[0], $pos[1] - $koord[1])
то когда под курсором обьект меняет цвет, значение $ColorPos остаеться прежним.
Если использовать связку:
$pos = MouseGetPos() ; тут должны быть массив координат точек
$ColorPos = PixelGetColor ($pos[0], $pos[1])
то при изменении размеров окна координаты точек в флеше то же меняються и проверяемая точка уже не относиться к обьекту проверки.
Проблема клика решилась с помощью:
ControlClick ( $titl, "", $klass , "left" , 1 , $fax[$fa] ,$fay[$fa])
Помогите решить проблему определения цвета точек в относительных координатах.
 

killbond

Осваивающий
Сообщения
96
Репутация
32
Почему бы не начать скрипт с того, что он открывает окно, в котором расположен флеш, затем выполняет определенные действия (прокрутка, таким образом, чтобы все контролы были визуально доступны) и только потом оперировать с координатами. Т.о. каждый раз при выполнении скрипта координаты будут сохраняться.
 
Автор
P

pgs2

Новичок
Сообщения
29
Репутация
0
Возможно начать скрипт с этого, но к сожалению я не знаю как открыть окно проводника( например IE) без возможности свернуть/ развернуть без всех панелей, а только со строкой Title, без прокруток без изменения размера и тому подобное, а главное не во весь экран а размером с флеш. Да тогда надобность в относительных координатах отпадает. Иначе, пользователь может изменить размер окна уже после запуска скрипта, ну а отключать клаву и мышь... Представь у меня бот работает около 20ч. в сутки, и что, мне компом не пользоваться совсем?)
 

killbond

Осваивающий
Сообщения
96
Репутация
32
pgs2 сказал(а):
Представь у меня бот работает около 20ч. в сутки, и что, мне компом не пользоваться совсем?)

Как раз-таки в таком случае возможность свернуть/развернуть быть должна - типа игра в фоновом режиме ;D


pgs2 сказал(а):
я не знаю как открыть окно проводника( например IE) без возможности свернуть/ развернуть без всех панелей, а только со строкой Title, без прокруток без изменения размера и тому подобное...

В этом случае не окно проводника нужно а Obj/COM функции.

Кури вот эту тему - http://autoit-script.ru/index.php?topic=539.0

А вот оттуда вариант специально под твои нужды:
Код:
#include <GUIConstantsEx.au3>

$swffile = "http://gflash.ru/swf/game_224.swf" ; Адрес swf игры
GUICreate("Flash", 640, 480)
$Flash_Create = ObjCreate("ShockwaveFlash.ShockwaveFlash.8")
$Flash_Load_Obj = GUICtrlCreateObj($Flash_Create , 0 , 0 , 640, 480)
$Flash_Create.Movie = $swffile
$Flash_Create.Loop = True
GUISetState(@SW_SHOW)

While 1
    $Msg = GUIGetMsg()
    Switch $Msg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd


И дальше все действия, что должен выполнять бот загоняешь в цикл. Только тогда делай сразу так, чтобы работало в фоновом режиме.

Насчет действий с окном в фоновом режиме есть тема - http://autoit-script.ru/index.php/topic,50.30.html
Но я сам до конца ее так и не разобрал... точно помню, что для клавиатуры можно так делать:
Код:
ControlSend($Window, "", "", "клавиша")

В фоновом режиме работает, про клики мышкой - самому было бы интересно знать.
 
Автор
P

pgs2

Новичок
Сообщения
29
Репутация
0
В фоновом режиме, на сколько я знаю, клики мышки и определение цвета точек можно осуществлять только работая с видимой частью видео буфера. В autoit если даже есть такие методы то они слишком сложны и неудобны... Про работу в Adobe Flash посижу почитаю может разберусь, спасибо. Но просто "адрес игры *\game_224.swf" ввести не получиться. Игра ВКонтакте и что б ее без контакта запустить нужно создавать HTML файл с большим куском текста где написан и адрес и еще куча всяких параметров (в которых я не очень разбираюсь) + обращение к 2 скриптам на яве и собственно 2 скрипта (яву я вообще не знаю) А бот то собственно у меня написан в UoPilot и обкатан в нем, хотел перенести в Autoit, но пока не получаеться, хотя я пользовался чужим ботом написаным в Autoit.
Можно еще попробовать, что то по принципу Autoit Window Info, которая показывает относительную точку ControlClick и абсолютные координаты и цвет в >> Mouse <<.
Т.е. моментально и не отображая курсора перемещать указатель мыши в относительную точку, определять позицию курсора в абсолютных координатах, проверять цвет точки, используя абсолютные координаты и сравнивать с эталонным цветом, который определен в массиве для точки с относительными координатами.
Должно работать, но как переместить курсор моментально и не отображая я пока не придумал. В этом отношении мне понравился ControlClick( $titl, "", $klass , "left" , 1 , $fax[$fa] ,$fay[$fa]), который в отличии от MouseClick( "button" [[[,x ,y] ,clicks],speed] ) не таскаеться вяло по экрану, а четко, быстро и незаметно делает клик в точке. Вот хотелось бы чтото такое же..., четко, быстро и незаметно получить цвет в точке))))
 
Автор
P

pgs2

Новичок
Сообщения
29
Репутация
0
Проблема решена :
Код:
Func Detekt($x , $y)
Dim $koord[4]
GUICtrlSetState ( $klass, $GUI_ENABLE ); может это лишнее
$koord = ControlGetPos( $titl, "", $klass)
$posX = $x+ $koord[0]
$posY = $y + $koord[1]
$c = PixelGetColor ($posX, $posY)
Return $c
EndFunc

Все работает, видимо неадекватно были настроены MouseCoordMode и PixelCoordMode. Всем спасибо за помощ!
 
Верх