Версия для печати темы
UoKit.com Форумы _ UO Pilot _ Получаю "черный цвет"
Автор: AbsorbeR 22.11.2016, 22:05
Есть игра, работающая в полноэкранном режиме. Из нее пытаюсь узнать цвет пикселя по координатам. В переменные приходят ноли. Если делать скриншот через PrintScreen, то на выходе черный квадрат. Как из такого приложения вытащить цвет?
Автор: Cockney 22.11.2016, 22:08
Запускать в оконном режиме.
Автор: cirus 23.11.2016, 2:17
Код
get color #color mousepos_x mousepos_y // получить цвет по курсором
hint mousepos_x mousepos_y #color // показать координаты и цвет в правом нижнем углу
Автор: AbsorbeR 23.11.2016, 18:00
Цитата(cirus @ 23.11.2016, 2:17)
Код
get color #color mousepos_x mousepos_y // получить цвет по курсором
hint mousepos_x mousepos_y #color // показать координаты и цвет в правом нижнем углу
Проверено. Не работает.
Автор: DarkMaster 23.11.2016, 20:10
Цитата
Проверено. Не работает.
в оконном режиме?
Автор: AbsorbeR 24.11.2016, 16:53
Цитата(DarkMaster @ 23.11.2016, 20:10)
в оконном режиме?
Вопрос касался полноэкранного или свернутого режима. Только вот в свернутом режиме, приложений по видимости замораживается. Так что для них варианты я хотел бы узнать. А с оконным всё ок.
Автор: DarkMaster 24.11.2016, 18:07
а полноэкранный там в зависимости от реализации. Вообще в натруальной полноэкранке видюха переходит в монопольный доступ приложения и из нее что-либо достать задача как минимум не самая тривиальная. Я так понимаю это что-то из разряда умельцев, которые смогли после evr вернуть изображение назад. Это немного уже другие плоскости.
Автор: AbsorbeR 27.6.2018, 16:24
С запозданием, и всё же всех благодарю за отклик. У меня не получилось перехитрить игру. Делал через оконный. Если у кого-то есть спортивный интерес, то игра Sinister City в Steam.
Отписал заодно в теме по UOPilot, может WKnight что-то придумает, или кто-то иной прошаренный.
Автор: DarkMaster 28.6.2018, 12:15
Цитата
С запозданием, и всё же всех благодарю за отклик. У меня не получилось перехитрить игру. Делал через оконный. Если у кого-то есть спортивный интерес, то игра Sinister City в Steam.
Отписал заодно в теме по UOPilot, может WKnight что-то придумает, или кто-то иной прошаренный.
Вам уже ответили как. Это особенность полноэкранного режима и возможности установки монопольного использования видеокарты.
Автор: AbsorbeR 28.6.2018, 19:09
Цитата(DarkMaster @ 24.11.2016, 18:07)
и из нее что-либо достать задача как минимум не самая тривиальная. Я так понимаю это что-то из разряда умельцев, которые смогли после evr вернуть изображение назад. Это немного уже другие плоскости.
То есть, это стоит понимать буквально, как "невозможно"?
Автор: Cockney 28.6.2018, 19:56
Цитата(DarkMaster @ 24.11.2016, 18:07)
а полноэкранный там в зависимости от реализации. Вообще в натруальной полноэкранке видюха переходит в монопольный доступ приложения и из нее что-либо достать задача как минимум не самая тривиальная. Я так понимаю это что-то из разряда умельцев, которые смогли после evr вернуть изображение назад. Это немного уже другие плоскости.
Когда-то я скидывал демку в лс на тему *****
Автор: Fors1k 29.6.2018, 0:48
Цитата(AbsorbeR @ 22.11.2016, 22:05)
Есть игра, работающая в полноэкранном режиме. Из нее пытаюсь узнать цвет пикселя по координатам. В переменные приходят ноли. Если делать скриншот через PrintScreen, то на выходе черный квадрат. Как из такого приложения вытащить цвет?
Проверил на Сounter-Strike. Запустил игру, свернул, запустил скрипт, развернул, навел курсор, подождал секунд 30, свернул.
Код
wait 15000 // скрипт ждет 15 секунд, пока я разверну игру, и наведу курсор на точку, с нужным цветом.
get color #color mousepos_x mousepos_y // определяем цвет
set $x mousepos_x // определяем координаты, в которых находится нужный цвет
set $y mousepos_y // определяем координаты, в которых находится нужный цвет
log x= $x // результат
log y= $y // результат
log color= #color // результат
end_script
Результат в логе:
Код
0:34:28 11 (autosaved_11.txt, 7): x= 487
0:34:29 11 (autosaved_11.txt, 8): y= 386
0:34:29 11 (autosaved_11.txt, 9): color= 4269851
Ну и далее уже можно пользоваться..
Код
...
if 487, 386 4269851
...
Автор: DarkMaster 29.6.2018, 1:17
Цитата
Когда-то я скидывал демку в лс на тему *****
Ты не поверишь, как работает пилот =) Но суть в том, что от монопольного использования едвали получится деться, т.к. там память скорее всего будет приватной. Но вообще можешь попробовать снять цвет относительно свежих версиях пилота через финдколор или имидж с обязательным указанием хендла.
Автор: Cockney 30.6.2018, 17:46
Да дело не в том как сейчас он работает, а как МОЖЕТ работать после изучения тех демок.
Автор: DarkMaster 30.6.2018, 19:02
Cockney
Оно уже реализовано. Возможно не в том виде и объеме в котором это возможно, но реализованно именно тем способом.
Автор: Cockney 30.6.2018, 22:32
Ну и отлично тогда, возможно я не понял совсем тот пост.
Автор: Иллидан 25.4.2023, 17:53
то есть это до сих пор никак не обойти, шоб получать норм скрины вместо чёрного квадрата, из свёрнутого процесса любой такой проги включая игры типа Star Conflict?
Автор: cirus 25.4.2023, 18:20
Цитата
то есть это до сих пор никак не обойти
Установить прозрачность окна в 0, окна не будет видно, скрины можно делать.
https://forum.uokit.com/index.php?showtopic=70181&hl=%CF%F0%EE%E7%F0%E0%F7%ED%EE%F1%F2%FC
Автор: Иллидан 25.4.2023, 19:03
Цитата(cirus @ 25.4.2023, 21:20)
Установить прозрачность окна в 0, окна не будет видно, скрины можно делать.
https://forum.uokit.com/index.php?showtopic=70181&hl=%CF%F0%EE%E7%F0%E0%F7%ED%EE%F1%F2%FC
результат скрина тот же чёрный квадрат, просто пока идёт изменение прозрачности окна калькулятора, оно меняет свой цвет на синий квадрат, если установить прозрачность на 0
проверил в Star Conflict на оконном режиме и заметил что при запуске клиента у него 1 хендл в котором скрин создаёт чисто белый квадрат, а после появления меню авторизации у него другой хендл притом что это тот же самый процесс - в 2 хендле скрин по прежнему создаёт чёрный квадрат внутри рамки с кнопками действий проводника от окна клиента+окно клиента становится тем же чёрным квадратом если ткнуть скрин в пилоте отведя мышу с окна игры, до тех пор пока не вернуть мышу в поле окна игры..
Автор: Aqualon 26.4.2023, 0:43
Тебе обязательно с привязкой к окну это делать?
По идее если допустимо чтобы окно было развёрнуто и на переднем плане, можно просто стянуть скриншот всего экрана, при этом обрезав корды взяв windowpos хендла.
Автор: Иллидан 26.4.2023, 18:34
Цитата(Aqualon @ 26.4.2023, 3:43)
Тебе обязательно с привязкой к окну это делать?
По идее если допустимо чтобы окно было развёрнуто и на переднем плане, можно просто стянуть скриншот всего экрана, при этом обрезав корды взяв windowpos хендла.
без привязки то оно и таким образом пашет но в 1 окно, хочу прост замутить фарм в несколько окон как в некоторых играх, с разных аккаунтов, благо песочница это позволяет, а без привязки к окнам это проблематично+низя смореть аниме и сериалы в браузере пока уопилот работает фотая весь экран без привязок(
Автор: DarkMaster 26.4.2023, 20:42
Цитата
в 2 хендле скрин по прежнему создаёт чёрный квадрат внутри рамки с кнопками действий проводника от окна клиента+окно клиента становится тем же чёрным квадратом если ткнуть скрин в пилоте отведя мышу с окна игры, до тех пор пока не вернуть мышу в поле окна игры..
Можно это со знаками припинания и какими-то логическими связями?)
Вообще решение обычно стандартное - дергать изображения с хендла родительского окна.
Автор: Иллидан 27.4.2023, 20:03
Цитата
дергать изображения с хендла родительского окна
вот ета мну нипаняна из справки, тоесь родительское окно это какое, если их всего 1 у клиента?
Или у калькулятора в Windows 10 их несколько?))
в Star Conflict клиенте например, их может и несколько, но процесс 1 и хендл у окна, при запуске клиента, сначала 396474 пока крутится индикатор загрузки, а потом до перезапуска клиента меняется на 1378916, когда интерфейс игры появляется..
Не пойму, где найти это родительское окно, если видно ток 1 процесс и его 1 окно
Автор: DarkMaster 2.5.2023, 18:06
Извиняюсь за задежку с ответом. Не было связи. Смотря какой калькулятор в какой винде. В xp там под сотню хэндлов. Каждая кнопочка и каждая рамочка.
Если родительского действительно нет и это окно верхнего уровня, то можно попробовть наоборот дочерние посмотреть. Так тоже бывает, но значительно реже.
Скачайте вот это https://forum.uokit.com/index.php?act=Attach&type=post&id=1171 . Сможете посмотреть все дерево окон.
Автор: Иллидан 12.1.2024, 7:22
Цитата(DarkMaster @ 2.5.2023, 21:06)
Извиняюсь за задежку с ответом. Не было связи. Смотря какой калькулятор в какой винде. В xp там под сотню хэндлов. Каждая кнопочка и каждая рамочка.
Если родительского действительно нет и это окно верхнего уровня, то можно попробовть наоборот дочерние посмотреть. Так тоже бывает, но значительно реже.
Скачайте вот это https://forum.uokit.com/index.php?act=Attach&type=post&id=1171 . Сможете посмотреть все дерево окон.
на днях спросил у нейронки возможное решение и она подсказала такой скрипт
Код
-- Получаем дескриптор окна игры
handle = getwindow "StarCraft"
-- Отвязываем uopilot от окна игры
attach 0
-- Делаем скриншот всего экрана
screen 0 0 1920 1080 screenshot.bmp [abs]
-- Ищем часть картинки из папки на скриншоте
-- Предположим, что картинка называется image.bmp и лежит в той же папке, что и uopilot
-- Предположим, что мы хотим найти координаты центра картинки на скриншоте
-- Предположим, что картинка имеет размер 100x100 пикселей
-- Предположим, что мы хотим искать картинку с точностью 90%
x, y = findimage 0 0 1920 1080 image.bmp 90
-- Подключаемся обратно к окну игры
attach handle
-- Если картинка найдена, то нажимаем кнопку N
if x > 0 and y > 0 then
-- Вычисляем координаты центра картинки
x = x + 50
y = y + 50
-- Перемещаем курсор на центр картинки
mouse x y
-- Нажимаем кнопку N
key N
end
тоесть, сначала отвязаться от окна игры шобы оно не затемнило свой экран при выполнении скрина и потом сделать снимок всего экрана, после чего вернуть подключение к окну игры и уже дальше возиться с полученным снимком, но этот код в пилоте не пашет, нейронка как обычно думает шо надо скачать новую версию уопилота которой не существует
Автор: DarkMaster 12.1.2024, 14:35
потому что весь этот код полный бред и отношения ни к старому ни к новому синтаксису практически никакого не имеет. Потратить чуть-чуть времени и написать ручками и все будет работать.
Автор: Иллидан 20.1.2024, 14:34
Цитата(DarkMaster @ 12.1.2024, 17:35)
потому что весь этот код полный бред и отношения ни к старому ни к новому синтаксису практически никакого не имеет. Потратить чуть-чуть времени и написать ручками и все будет работать.
ну я попробовал так сделать
Код
//attach 0
printscreen 0 0 0 1600 900 Scripts\Screens/1.bmp
// Делаем скриншот всего экрана
//screen 0 0 1600 900 Scripts\Screens/1.bmp [abs]
End_script
-- Ищем часть картинки из папки на скриншоте
-- Предположим, что картинка называется image.bmp и лежит в той же папке, что и uopilot
-- Предположим, что мы хотим найти координаты центра картинки на скриншоте
-- Предположим, что картинка имеет размер 100x100 пикселей
-- Предположим, что мы хотим искать картинку с точностью 90%
//x, y = findimage 0 0 1920 1080 image.bmp 90
-- Подключаемся обратно к окну игры
//attach handle
-- Если картинка найдена, то нажимаем кнопку N
//if x > 0 and y > 0 then
-- Вычисляем координаты центра картинки
//x = x + 50
//y = y + 50
-- Перемещаем курсор на центр картинки
//mouse x y
-- Нажимаем кнопку N
//key N
//end
и скрин выполнился, но в этот момент уопилот небыл привязан к игре, а как отвязать/привязать его от окна игры чёт непойму какая команда
покопался в справке и довёл до ума таким примером кода
Код
set #handle 0 //так указуеца весь экран без потери привязки к окну
set #a FindImage(0 0 1600 900 (Scripts\Таурахэ.bmp) %arr #handle 65 -1 3) //поиск изображения где 65 это % точности совпадения
hint #a //в правом нижнем углу отображён результат поиска в % совпадения с файлом
if #a > 0
move %arr [1 1] %arr [1 2] #handle //навести курсор на первую найденную картинку
//обратите внимание, что в команде 'move' указан хендл окна
send 3
End_script
end_if
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)