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

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

UoKit.com Форумы _ UO Pilot _ Определение формы курсора.Решено

Автор: Мишаня через тире 13.1.2020, 16:18

Здравствуйте. Хочу написать бота для игры Атлантика онлайн.
Игра самая обычная - бегаешь по локациям, наводишь курсор на моба, нападаешь.
Курсор при наведении на моба меняет форму, это могло бы весьма[i] упростить процесс выцепления мобов из окружающей среды, но. Скриншоты делаемые уопилотом курсор не показывают в принципе.
В связи с этим 2 вопроса.
1) Возможно ли как-то опционально таки получить курсор на скрине, для дальнейшей обработки. Если нет, то...
2) Как я понимаю, с точки зрения windows курсор такое же окно как и все остальные. Является ли оно дочерним по отношению к какому-либо окну, можно ли получить информацию о нем из списков дочерних окон?

Спасибо за помощь заранее. Если нужна какаянть информация дополнительная, предоставлю.


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

Вопрос решен. Изображение текущего курсора элегантно и просто выдирается из ресурсов самой игры.
Реализация на С, если кому интересно:
CURSORINFO ci;
ICONINFO ii;

ci.cbSize= sizeof(CURSORINFO);
if(!GetCursorInfo(&ci))
MessageBox(NULL, "GetCursorInfo", "Oops", MB_ICONERROR);
hCursor= ci.hCursor;

ii.fIcon= FALSE;
if(!GetIconInfo (hCursor, &ii))
MessageBox(NULL, "GetIconInfo", "Oops", MB_ICONERROR);
hBitmap= ii.hbmColor;

Осталось одно маленькое неудобство, в том, что данная реализация не работает, если окно игры активно.
Сорри, но дальше возиться неохота, проще выводить его в пассив, через несколько секунд после клика.
Всем спасибо, удачной охоты ).

Автор: Fors1k 13.1.2020, 18:20

Цитата(Мишаня через тире @ 13.1.2020, 16:18) *

1) Возможно ли как-то опционально таки получить курсор на скрине, для дальнейшей обработки.

Подключись тимвивером к компу, поставь галочку "отображать курсор клиента", сделай скрин.


Цитата(Мишаня через тире @ 13.1.2020, 16:18) *
Мне нужно отловить один единственный пиксель на курсоре, для реализации
Цитата(Мишаня через тире @ 13.1.2020, 16:18) *
Скриншоты делаемые уопилотом курсор не показывают в принципе.

Если пилот не может видеть курсор, то как он поймет что на нем изменился пиксель?)

Автор: Мишаня через тире 14.1.2020, 0:03

Цитата(Fors1k @ 13.1.2020, 18:20) *

Подключись тимвивером к компу, поставь галочку "отображать курсор клиента", сделай скрин.
Если пилот не может видеть курсор, то как он поймет что на нем изменился пиксель?)


Так вопрос собственно в этом и состоит. Каким образом из пилота можно поймать изменение формы и цвета курсора. Ну или его части ). Смысл делать скрин сторонним по нету, так-то я его и в пайнте нарисовать могу.
Мне надо сделать так чтобы это можно было определить из скрипта.

Автор: DarkMaster 14.1.2020, 5:04

Ну поидее если стороннее что-то видит мышь на скрине (далеко не факт), то можно этим сторонним сохранять, подгружать изображение в пилот и искать его.
Собственно тут нужен будет набор:
loadimage+findimage.
Скринить лучше на ram диск, а то и так цепочка тормозная ожидается.

Автор: cirus 14.1.2020, 5:20

https://forum.uokit.com/index.php?showtopic=30151&hl=%F1%EB%E5%E6%E5%ED%E8%E5

Автор: DarkMaster 14.1.2020, 6:23

хе. мысли сходятся =)

Автор: Мишаня через тире 14.1.2020, 6:38

Цитата(cirus @ 14.1.2020, 5:20) *

https://forum.uokit.com/index.php?showtopic=30151&hl=%F1%EB%E5%E6%E5%ED%E8%E5


Чорт, говорила же мне мама в детстве, - учись Мишаня через тире юзать поиск. А я не слушался. Огромное спасибо. Тема закрыта.

Автор: Мишаня через тире 15.1.2020, 13:34

Цитата(Мишаня через тире @ 14.1.2020, 6:38) *

Чорт, говорила же мне мама в детстве, - учись Мишаня через тире юзать поиск. А я не слушался. Огромное спасибо. Тема закрыта.


Увы . С удивлением увидел на скрине стандартный виндовый курсор мыши.
Плюнул на все, вспомил молодость и пошел писать свой скринер. И вот тут-то в процессе и выяснилось, что сия программа дорисовывает на скрин текущий стандартный курсор винды. Ибо средствами winapi получить изображение курсора невозможно, так как он вне всех контекстов, в том числе и дисплея.
Итого. Как из пилота получить доступ к видеобуферу? Можно даже на ассемблере ).

Автор: DarkMaster 15.1.2020, 14:14

Цитата
изображение курсора невозможно, так как он вне всех контекстов, в том числе и дисплея

А можно где-то почитать? а то мельком пробовал искать и не нашел интересующей инфы. В частности очень интересно каким образом он отрисовывается в рамках использования данного метода для других целей.

Цитата
Как из пилота получить доступ к видеобуферу?

Есть небезосновательные подозрения, что это не поможет.

Автор: Мишаня через тире 15.1.2020, 14:41

Цитата(DarkMaster @ 15.1.2020, 14:14) *

А можно где-то почитать? а то мельком пробовал искать и не нашел интересующей инфы. В частности очень интересно каким образом он отрисовывается в рамках использования данного метода для других целей.


Информация взята отсюда https://www.codeproject.com/Articles/12850/Capturing-the-Desktop-Screen-with-the-Mouse-Cursor.

Конечно, это не msdn, но учитывая, что ни один контекст устройств изображения курсора не видит, это весьма похоже на правду.

Более детальную информацию, учитывая мои 3 слова на англ., я в ингнете не нашел, может у Вас получится )

зы А чем плох видеобуфер? Насколько я еще помню ассемблер, просто массив точек в памяти. Если погуглить можно даже абсолютный адрес найти. Ну, я так думаю )

зы 2 Мне тут на одном форуме вешают, что можно из дескриптора курсора получить ид ресурса, со всеми вытекающими. Хоть убей не помню такого, и найти не могу. Может подскажет кто?

Автор: DarkMaster 15.1.2020, 19:31

Цитата
зы А чем плох видеобуфер? Насколько я еще помню ассемблер, просто массив точек в памяти. Если погуглить можно даже абсолютный адрес найти. Ну, я так думаю )

тем, что там его может не быть. Не все, что вы видите идет через видеобуфер. Часть наложений его минует. Сюрприз.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)