Помощь - Поиск - Пользователи - Календарь
Полная версия: Распознавание цвета пикселя в перекрытом окне
UoKit.com Форумы > Кликер > UO Pilot
Страницы: 1, 2
Gwinbleid
Добрый день.

Подскажите, как возможно осуществить распознавание цвета пикселя в перекрытом окне?
Скрипты на подобие таких:
if 237, 452 11956255 and 145, 500 16777215 and 166, 510 11039289
left 150, 117
end_if
DarkMaster
функции:
color()
findcolor()
findimage()
при условии использования хендла окна в качестве метода. Окно должно быть перекрыто, а не свернуто.
Gwinbleid
Цитата(DarkMaster @ 26.9.2018, 18:40) *

функции:
color()
findcolor()
findimage()
при условии использования хендла окна в качестве метода. Окно должно быть перекрыто, а не свернуто.

Сделал так:
set #handle Findwindow(198428)
if color (150, 500 #handle) = 16777215 and color (268, 502 #handle) = 16711164 and color (95, 509 #handle) = 14470330
left 150, 117
end_if

В перекрытом окне все равно не кликает. В не перекрытом кликает
Fors1k
В if color не работает#handle. Ошибка пилота видимо.
Код
set #handle Findwindow(198428)

тут можешь написать хоть babushka
Код
set #handle Findwindow(babushka)

Результат будет такой же.

Могу предложить сделать так, это работает:
Код

set workwindow 198428
  set #a findcolor (150, 500  150, 500  1 1 (16777215 ) %a workwindow -1 17)
  set #b findcolor (268, 502  268, 502  1 1 (16711164 ) %b workwindow -1 17)
  set #c findcolor (95, 509 95, 509  1 1 (14470330 ) %c workwindow -1 17)
if #a > 0 and #b > 0 and #c > 0
  left 150, 117
end_if
DarkMaster
Цитата
В if color не работает#handle. Ошибка пилота видимо.

Все там работает. Смотрите синтаксис color().
Цитата
set #handle Findwindow(198428)

Findwindow возвращает хендл по имени окна. Вводить сюда хендл бессмысленно.
Gwinbleid

Цитата
Findwindow возвращает хендл по имени окна. Вводить сюда хендл бессмысленно.

А куда его вводить? Когда вставлял 198428 после координат в скобке, то ниче не работало.
DarkMaster
//Пример 3
//Работает в перекрытом окне
set #handle Findwindow("Yandex")
set #x 600
set #y 400
if color (#x #y #handle) = 12625555 //определить цвет в рабочем окне в координатах 600 400, если он равен 12625555
msg Цвет совпал. //показать сообщение
end_if
Gwinbleid
Цитата(DarkMaster @ 29.9.2018, 3:27) *

//Пример 3
//Работает в перекрытом окне
set #handle Findwindow("Yandex")
set #x 600
set #y 400
if color (#x #y #handle) = 12625555 //определить цвет в рабочем окне в координатах 600 400, если он равен 12625555
msg Цвет совпал. //показать сообщение
end_if

Делал так. В перекрытом окне все равно не работает. Не хочет кликать
DarkMaster
что именно не работает? снятие цвета? клик?
выведите в лог значение цвета получаемое с помощью color(), попробуйте без проверки цвета совершить клик в перекрытое окно. Какой эмуляцией кликаете? Работать будет только left и right без приставки "k".
Gwinbleid
Цитата(DarkMaster @ 29.9.2018, 13:28) *

что именно не работает? снятие цвета? клик?
выведите в лог значение цвета получаемое с помощью color(), попробуйте без проверки цвета совершить клик в перекрытое окно. Какой эмуляцией кликаете? Работать будет только left и right без приставки "k".

Снятие цвета не работает. Клик по перекрытому окну без каких-либо условий как всегда работает. Собственно в перекрытом окне ни msg не работает, ни left, если стоит условие на цвет
Fors1k
Цитата(DarkMaster @ 28.9.2018, 5:17) *

Все там работает. Смотрите синтаксис color().

Findwindow возвращает хендл по имени окна. Вводить сюда хендл бессмысленно.

А если не использовать файндвиндоу, и сразу вставить хэндл через ctrl+a, тоже же должно работать?
Код
set #handle 135894
set #x 600
set #y 400
if color (#x #y #handle) = 12625555 //определить цвет в рабочем окне в координатах 600 400, если он равен 12625555
msg Цвет совпал. //показать сообщение
end_if
DarkMaster
Цитата
А если не использовать файндвиндоу, и сразу вставить хэндл через ctrl+a, тоже же должно работать?

Вам нужно в явном виде указать хендл при поиске. Нужно понимать так же, что обычная привязка - это НЕ в явном виде. Т.е. если у вас уже есть привязка и искать нужно в рабочем окне, то достаточно будет указать workwindow в параметрах color() (ctrl+a тоже считается), если же у вас нужный хендл хранится просто в переменной, то необходимо указать уже ее. Т.е.:
color (x y workwindow) - если в рабочем окне, привязка могла быть сделана через ctrl+a либо через set workiwindow findwindow/число
color (x y #handle) - если нужный хендл хранится в перменной #handle, например, если было сделано set #handle findwindow/число.
Fors1k
Ну все, тогда автору нужно просто из скрипта в третьем посте убрать findwindow , и все заработает.
DarkMaster
Цитата
Ну все, тогда автору нужно просто из скрипта в третьем посте убрать findwindow , и все заработает.

Но тогда и заменить #handle на workwindow. Еще раз напоминаю: для поиска в перекрытом окне хендл должен быть указан в явном виде.
Gwinbleid
Цитата(DarkMaster @ 30.9.2018, 8:07) *

Но тогда и заменить #handle на workwindow. Еще раз напоминаю: для поиска в перекрытом окне хендл должен быть указан в явном виде.

Когда я после (x y) указываю просто цифры текущего окна, которое через ctrl+a выбрал, то он вообще не ищет ничего даже в открытом окне (не перекрытом).
DarkMaster
Нажмите кнопку F вверху интерфейса пилота. Там отображается полученное при захвате изображение. Возможно необходимо указать родительское окно.
Gwinbleid
Цитата(DarkMaster @ 2.10.2018, 8:49) *

Нажмите кнопку F вверху интерфейса пилота. Там отображается полученное при захвате изображение. Возможно необходимо указать родительское окно.

В открытом, после нажатия F, окне вообще пусто. Просто все серое, под цвет панели пилота
DarkMaster
Цитата
В открытом, после нажатия F, окне вообще пусто. Просто все серое, под цвет панели пилота

Скрипт то запустите =)
Vik_777
Цитата(DarkMaster @ 4.10.2018, 21:13) *

Скрипт то запустите =)

Думаю что парню ничего из сказанного не помогло как впрочем и мне. (поиск изображений снятие цвета )
Опробовал все что тут написано и ничего, хотя макросы уже год как пишу и прогой доволен но вот поиск в перекрытых окнах пипец не получается, все что могу это только тыкать мышкой в указанных координатах и все .....
Был бы рад если бы мне мозг прочистили.
имеем Win10 разреш 1680 1050 аэро отключен пилот 2.39 (09.03.2017)
игра Perfect World до 10 окон (именно окна чтоб можно быстро переключаться между ними и видеть )
есть подозрение что надо какое то родительское окно найти и от него танцевать но что то никак не получается. unsure.gif
cirus
В окне пилота кнопка F, нажать. Откроется окно.
Код
// привязаться к окну с игрой
set #a findcolor (0 0 500 500 (255)  %arr workwindow)
hint #a
wait 1

Что отображается в окне при запуске скрипте?
Gwinbleid
Цитата(DarkMaster @ 4.10.2018, 21:13) *

Скрипт то запустите =)

Скрипт запускал, оно все равно никак не изменяется. Просто серое.

Цитата(cirus @ 5.10.2018, 15:08) *

В окне пилота кнопка F, нажать. Откроется окно.
Код
// привязаться к окну с игрой
set #a findcolor (0 0 500 500 (255)  %arr workwindow)
hint #a
wait 1

Что отображается в окне при запуске скрипте?

При указанном в этом посте скрипте просто черный цвет
DarkMaster
https://forum.uokit.com/index.php?act=Attac...ost&id=1171
качаете, запускаете (никуда в систему не лезет, портабл). Перетаскиваете прицел на окно игры, открываете дерево окон. Скрин дерева сюда.
Gwinbleid
Цитата(DarkMaster @ 5.10.2018, 20:04) *

https://forum.uokit.com/index.php?act=Attac...ost&id=1171
качаете, запускаете (никуда в систему не лезет, портабл). Перетаскиваете прицел на окно игры, открываете дерево окон. Скрин дерева сюда.

DarkMaster
с какими-то эмулаторами были проблемы
на данный момент попробуйте сделать следующее:
Код
// привязаться к окну с игрой
set workwindow GetWindow (workwindow OWNER)
while 1 = 1
    set #a findcolor (0 0 500 500 (255)  %arr workwindow)
    hint #a
    wait 1
end_while

Если опять будет малевич, то:
Код
// привязаться к окну с игрой
set workwindow GetWindow (workwindow OWNER)
set workwindow GetWindow (workwindow OWNER)
while 1 = 1
    set #a findcolor (0 0 500 500 (255)  %arr workwindow)
    hint #a
    wait 1
end_while
Gwinbleid
Цитата(DarkMaster @ 5.10.2018, 21:04) *

с какими-то эмулаторами были проблемы
на данный момент попробуйте сделать следующее:
Код
// привязаться к окну с игрой
set workwindow GetWindow (workwindow OWNER)
while 1 = 1
    set #a findcolor (0 0 500 500 (255)  %arr workwindow)
    hint #a
    wait 1
end_while

Если опять будет малевич, то:
Код
// привязаться к окну с игрой
set workwindow GetWindow (workwindow OWNER)
set workwindow GetWindow (workwindow OWNER)
while 1 = 1
    set #a findcolor (0 0 500 500 (255)  %arr workwindow)
    hint #a
    wait 1
end_while


С первым вариантом вариантом показывает окно эмулятора. Что дальше можно сделать с этой информацией?)
Vik_777
Цитата(cirus @ 5.10.2018, 15:08) *

В окне пилота кнопка F, нажать. Откроется окно.
Код
// привязаться к окну с игрой
set #a findcolor (0 0 500 500 (255)  %arr workwindow)
hint #a
wait 1

Что отображается в окне при запуске скрипте?

ВИДИМ ПО
hint #a /// -4 ////
Нажмите для просмотра прикрепленного файла
Vik_777
ДЕРЕВО ГРУЗИЛОСЬ ДОЛГО БОЛЬШЕ 30-40 СЕК СОРЬ КАПС.Нажмите для просмотра прикрепленного файла
cirus
Цитата
hint #a /// -4 ////

И кому я это пишу:
Цитата
привязаться к окну с игрой
Vik_777
Цитата(cirus @ 6.10.2018, 1:37) *

И кому я это пишу:

biggrin.gif
move 50 50 abs
set WorkWindow WindowFromCursor // привязался к окну с игрой ?
showwindow TOP
wait 300
set #a findcolor (0 0 500 500 (255) %arr workwindow)
//hint #a
hint (24 clRed 723, 368 (#a))
wait 1
end_script

Видим ноль.Нажмите для просмотра прикрепленного файла
на всяк случай ( в активном окне цвета определяются нормально проблема с перекрытыми)
DarkMaster
Цитата
С первым вариантом вариантом показывает окно эмулятора. Что дальше можно сделать с этой информацией?)

С содержимым? С тем, что вам нужно определять? Второй вариант?
cirus
Цитата
Видим ноль.

0 это тоже результат, ищется цвет 255, он не найден. Это сейчас не важно.
В окне F что отображается при запуске скрипта?
Vik_777
Цитата(cirus @ 6.10.2018, 10:31) *

0 это тоже результат, ищется цвет 255, он не найден. Это сейчас не важно.
В окне F что отображается при запуске скрипта?

вижу черный цвет в окне по нажатию на F
Gwinbleid
Цитата(DarkMaster @ 6.10.2018, 9:54) *

С содержимым? С тем, что вам нужно определять? Второй вариант?

Содержимое окна? Если развернуть, то почти все окно эмулятора показывается в F, за исключением немного нижней части, как раз панель с основными кнопками.
Второй вариант показывал чисто черный цвет.
Немного странно работает тоже. Показывает окно только при последовательных действиях: 1. Ctrl+a на окно; 2. Запуск скрипта; 3. Нажатие F.
Если скрипт просто остановить и заново запустить, то картинка в окне замирает. Если закрыть окно и опять открыть через F, то картинка замирает. Если сделать не в той последовательности, то черный экран.
cirus
Цитата
вижу черный цвет в окне по нажатию на F

Тогда не будет работать.
Установить win7, в ней почти во всех приложениях работает поиск в перекрытом окне.
Vik_777
Цитата(cirus @ 6.10.2018, 12:15) *

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


huh.gif я перешел недавно с win7 на win10
ни капли не жалею и проблемы с 7 плавно перетекли в 10.
может что то можно еще попробовать?
Gwinbleid
Цитата(Vik_777 @ 6.10.2018, 12:31) *

huh.gif я перешел недавно с win7 на win10
ни капли не жалею и проблемы с 7 плавно перетекли в 10.
может что то можно еще попробовать?

Попробуй как мне советовали. В посте DarkMaster. С одним из способов дублирует окно эмулятора. Только что дальше с этим делать не знаю)
DarkMaster
Цитата
Содержимое окна? Если развернуть, то почти все окно эмулятора показывается в F, за исключением немного нижней части, как раз панель с основными кнопками.

Это обусловлено заданной областью 500 на 500. Вам нужно при поиске использовать именно этот хендл и все будет нормально. Тем не менее учтите, что координаты скорее всего будут отличаться на размер шапки окна, т.е. нужно будет делать смещения. Все определяется и будет работать.
Gwinbleid
Цитата(DarkMaster @ 6.10.2018, 13:07) *

Это обусловлено заданной областью 500 на 500. Вам нужно при поиске использовать именно этот хендл и все будет нормально. Тем не менее учтите, что координаты скорее всего будут отличаться на размер шапки окна, т.е. нужно будет делать смещения. Все определяется и будет работать.

А точнее можно, пожалуйста? Попробовал протестить с:
set #handle workwindow GetWindow (workwindow OWNER)
if color (284, 411 #handle) = 33757
msg Цвет совпал.
end_if

Работает также, только в неперекрытом.
Или как это примерно должно выглядеть?
DarkMaster
Это так и должно выглядить.
НО, когда вы будете снимать координаты, вы скорее всего снимите относительно другого хендла и точка "съедет".
В качестве теста попробуйте:
Код
//ctrl+a по окну.
set #handle workwindow GetWindow (workwindow OWNER)
while 1 = 1
    log color (284, 411 #handle)
    wait 10
end_while
cirus
Вместо color используйте findcolor и посмотрите в каких координатах найдётся цвет.
Vik_777
Цитата(Gwinbleid @ 6.10.2018, 12:51) *

С одним из способов дублирует окно эмулятора.

поточнее плиз а то совсем не понял на какой скрипт смотреть.

Цитата(DarkMaster @ 2.10.2018, 8:49) *

Нажмите кнопку F вверху интерфейса пилота.

вот про кнопку очень понравилось
как то не пользовался ей а ооочень полезно
все сразу видишь чего и где ищешь ... или не видишь. rolleyes.gif

[/quote]
а вот как бы поиск ввести по макросу ну или хотя бы строки 1299 к примеру.
иногда надо что то поправить и нотепад открывать лень.
DarkMaster
Цитата
поточнее плиз а то совсем не понял на какой скрипт смотреть.

https://forum.uokit.com/index.php?s=&sh...st&p=427438

вторую часть поста не понял.
Vik_777
Цитата(DarkMaster @ 6.10.2018, 21:40) *

https://forum.uokit.com/index.php?s=&sh...st&p=427438

вторую часть поста не понял.

по первой части все понятно у меня не лечиться, что не назначай рабочим окном видит ток что что открыто на экране.
по поиску (тут уже в самом пилоте пожелание) чтоб указать к какой строке макроса
редактируемого (набираемого) перейти (скажем строка за номером 1340 перейти)
туда и переместиться чтоб поправить набираемый текст макроса.
Еще лучше указать что ищешь. см рис.Нажмите для просмотра прикрепленного файла
ну помечтать не вредно же unsure.gif
cirus
Цитата
что не назначай рабочим окном видит ток что что открыто на экране.

Рабочий стол будет отображать даже если он перекрыт.
Gwinbleid
Цитата(DarkMaster @ 6.10.2018, 16:07) *

Это так и должно выглядить.
НО, когда вы будете снимать координаты, вы скорее всего снимите относительно другого хендла и точка "съедет".
В качестве теста попробуйте:
Код
//ctrl+a по окну.
set #handle workwindow GetWindow (workwindow OWNER)
while 1 = 1
    log color (284, 411 #handle)
    wait 10
end_while


Логится цвет тот же, что и у меня через Ctrl+a.
Пробовал найти цвет в координатах через
set #a findcolor (242 366 298 429 1 1 (34013) %arr #handle)
save_array %arr D:\SaveColor.txt
End_script

После выбрал одну координату из массива (24 точки), и протестил через
set #handle workwindow GetWindow (workwindow OWNER)
if color (273 410 #handle) = 34013 (координаты и цвет из массива)
left 279, 415
end_if

Один фиг не работает в перекрытом окне. В неперекрытом работает.

Возможно есть еще какой-то вариант, который работал бы в перекрытом окне? Без распознавания цвета, но чтобы при разных экранах кликал в разные координаты.
DarkMaster
Цитата
Один фиг не работает в перекрытом окне.

Перекрытом или свернутом? Что в окне по кнопке F отображается в перекрытом и неперекрытом состоянии?
Gwinbleid
Цитата(DarkMaster @ 7.10.2018, 14:18) *

Перекрытом или свернутом? Что в окне по кнопке F отображается в перекрытом и неперекрытом состоянии?

Перекрытом. В окне ничего не отображается по всем 3 вариантам (в т.ч. который присылали "для теста")
DarkMaster
Всмысле ничего? Вы же говорили, что там отображается окно... Попробуйте через финдколор, я не уверен, что color() инициирует обновление изображения в F окне.

https://forum.uokit.com/index.php?s=&sh...st&p=427494
DarkMaster
Каковы результаты?
sel
Касаемо данной темы, у меня получилось такое дерево окон:


Изображение

Меня так же заинтересовала тема с поиском в перекрытом окне игры.

Код

set workwindow GetWindow (workwindow OWNER)
set #test FindImage (0 0  1920 1080  (images\pic26.bmp) %arr workwindow)
if #test > 0
log нашёл
else
log ненашёл
end_if
End_script


Находит картинку в игре если она не перекрыта никаким другим окном соответственно, проверяю на 10тке, дома есть возможность потестить на 7мёрке, завтра скину результаты, но скорее всего ничего не выйдет, подозреваю, что проблема в самом окне игры, когда ты открываешь что либо поверх, окно замораживается и игра перестаёт жрать ресурсы видяхи, тут мне кажется только поможет некий Unfreeze, но минусов несколько:
1. если не фризить 10 окон то комп не потянет такой нагрузки.
2. любые модификации клиента строго караются лицензиатом игры.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.