Что нового

pixelsearch в неактивном окне

lirikmel

Продвинутый
Сообщения
226
Репутация
84
Помгите чем можите -).Не могу никак сообразить надо снимать показатели с неактивного окна в процентах, для примера это было реализовано так
Код:
Func ControlMobHP($MobHPx, $MobHPy, $len) ; передаём в функцию координаты и длинну
 Local $color = 0x9CD308 ; искать красный цвет RGB
local $position = PixelSearch (925, 64, 646, 64, $color,5,2,$hWnd); разброс яркости 4, шаг поиска каждый второй пиксель
If IsArray ($position) Then
$position[0] -= $MobHPx
local $Percent = $position[0] * 100 / $len2
$Percent = Ceiling ($Percent)
Return $Percent
EndIf
Return 0
EndFunc


НО само собой в неактивном окне не работает ......поидее можно использовать вот такую функцию
Код:
Func _WinAPI_PixelGetColor($x,$y) ;работает в неактивном(активном) окне с визуально видимыми точками
    Local $Struct = DllStructCreate("int X;int Y")
    $Ckoord = ControlGetPos( $titl, "", $klass) ; тут привязаться к окну и элементу окна
    $Wkoord = WinGetPos( $titl )                ; чтоб координаты стали относительные
    $iX = $x + $Ckoord + $Wkoord[0] + 4       ; пересчет на относительные координаты
    $iY = $y + $Ckoord + $Wkoord[1] + 23      ; с учетом бордюра(4) и титульной строки (23)
    DllStructSetData($Struct, "X", $iX)
    DllStructSetData($Struct, "Y", $iY)
    _WinAPI_ScreenToClient($titl, $Struct)
    $iX = DllStructGetData($Struct, "X")
    $iY = DllStructGetData($Struct, "Y")
    $c = Pixelgetcolor ($iX, $iY);$iX, $iY,0xEF2C5A)
    Return $c ;возвращает цвет точно такой же как и PixelGetColor
EndFunc


..те используется Pixelgetcolor а как также задействовать pixelsearch ?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
Global $CurWin = "EVE"
Global $CurWin_hwnd = WinGetHandle($CurWin)
Local $Loot = PixelSearch(58, 406, 58, 406, 0x000000, 1, 1, $CurWin_hwnd)

У меня все чудненько работает. Неактивное окно не должно перекрываться другими окнами.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Неактивное - это окно находящееся в области видимости экрана но не имеющее фокус. Если такое окно не перекрыто поверх другими окнами, то на него можно использовать пиксельсерч по средством hwnd. Далее узнав нужные координаты цвета относительно левого верхнего угла клиента этого окна мы можем активировать его и с помощью соответствующей опции MouseCoordMode ткнуть по нужным координатам. В процессе нажатия окно так и так должно стать активным.
 

protonix

Новичок
Сообщения
9
Репутация
0
А имеет значение разрядность системы ??
У меня например x64 Win-7 ни один из способов описанных на этом форуме не позволили получить цвет неактивного (несвернутого) окна... Всегда выдается 0х000000 ... а когда делаешь программно принтскрин, и затем просматриваешь его, то там черный экран вместо скриншота .. Интересно в чем может быть проблема :(

Никогда не думал что получить цвет неактивного окна игры это такая аццкая проблема...

И еще вопрос к гуру ботописания. Ктото пробовал запускать требовательные к ресурсам новые игры на виртуальных машинах ? Есть ли среди них такие что потянут современные игры с 3D ускорением и т.п. ???
Если не научусь брать цвет неактивного окна придется тупо терзать виртуальную машину чтоб скрипт делал свое черное дело (((( но так не хочется это извращение делать ... хехе
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
protonix сказал(а):
а когда делаешь программно принтскрин, и затем просматриваешь его, то там черный экран вместо скриншота ..
Это внутренняя защита игры, а не косяк автоита.


Добавлено:
Сообщение автоматически объединено:

edward_freedom сказал(а):
Может кто нибудь знает, есть такой бот LegBot,вот как там реализованно поиск цвета в свернутом окне и посылание туда клика? :blink:
Значит игра пользуется ресурсами игры, пакетами или памятью например.
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
OffTopic:
имейте ввиду, что в свернутом или неактивном окне цвет пикселей меняется :smile:



Добавлено:
Сообщение автоматически объединено:

вот тут вроде доступно все по получению цвета пикселя в неактивном окне http://autoit-script.ru/index.php?topic=1057.0
 

protonix

Новичок
Сообщения
9
Репутация
0
Пробовал каждый из приведенных в той теме примерами кода.
Во всех случаях получаю цвет неактивного окна 0x000000

Когда окно активизируется , то цвет получается нормальный.

Какие еще есть способы получить цвет окна если оно не свернуто, а просто закрыто поверх другим окном ?
может как-то прозрачность ему задать почти нулевую , либо чтоб оно было как-то активировано, но скрывалось для пользователя ?
Потребность в том чтоб юзер чтото мог делать другое, пока скрипт работает...
 

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
lirikmel, нашел ошибку при вызове PixelSearch, в первых 4 параметрах. дальше не смотрел
 
Автор
L

lirikmel

Продвинутый
Сообщения
226
Репутация
84
код который предложил белфигор рабочий на 10 проц ...в моем случае просто стоит защита ...считаю тему исчерпаной
 

protonix

Новичок
Сообщения
9
Репутация
0
Так существует ли вобще в природе способ средствами AutoIt определить цвет в окне которое перекрыто другими окнами ?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
В вин7 ее средствами в панели управления отрисовывается что происходит в окне которое перекрыто другими окнами, так что теоретически - возможно, на практике не пробовал.
 

protonix

Новичок
Сообщения
9
Репутация
0
Хорошо с перекрытиями окон к сожалению все ясно. по факту средствами Autoit похоже это сделать нельзя....
Тогда другой вопрос касаемо PixelGetColor ( x , y [, hwnd] )
Есть ли у этой команды какой нибудь параметр типа как у PixelSearch есть shade-variation ? Чтобы он мог находить оттенки цвета ?
 

kzru_hunter

Осваивающий
Сообщения
144
Репутация
49
у меня PixelGetColor возвращал всегда одно и тоже значение, даже если окно перекрыто другими окнами.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
У PGK нет такого параметра. Он не ищет, он определяет цвет пикселя.
 

protonix

Новичок
Сообщения
9
Репутация
0
kzru_hunter сказал(а):
у меня PixelGetColor возвращал всегда одно и тоже значение, даже если окно перекрыто другими окнами.

Приведи пожалуйста пример кода как ты используешь его ? может я как-то не так вызываю эту хрень .. у меня он определяет только цвет верхнего окна, хотя хендл передаю нужного мне окна...

Т.е. я использую код типа такого:
Код:
$hwnd=WinGetHandle("TEST")
$color= PixelGetColor( 500 , 500  , $hwnd )
$result=  Hex($color, 6) 
ConsoleWrite( "--->" & $result &  @CR )


Belfigor а есть такая команда которая определяет пиксель, но при этом все таки с вариациями оттенка ?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
PixelSearch. Ну точнее она не определяет а ищет цвет с вариациями оттенка.
 

protonix

Новичок
Сообщения
9
Репутация
0
kzru_hunter сказал(а):
у меня PixelGetColor возвращал всегда одно и тоже значение, даже если окно перекрыто другими окнами.

Пример кода можешь показать ? я попробую у себя...
 
Верх