Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

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? sad.gif
Прикрепленное изображение

Автор: 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 окно unsure.gif

Автор: 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


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

Автор: 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


и скрин выполнился, но в этот момент уопилот небыл привязан к игре, а как отвязать/привязать его от окна игры чёт непойму какая команда unsure.gif

покопался в справке и довёл до ума таким примером кода

Код
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)