Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перемещение указателя в игре

38K
15 июня 2008 года
MoDErahN
5 / / 15.06.2008
Собственно вопросец небольшой, но порядком мне попортивший нервы.
Как переместить курсор в известную мне точку в стороннем приложении?
SetCursorPos() не предлагать, т.к. приложение имеет самостоятельный курсор (даже при простом сворачивании-разворачивании обычный курсор смещается относительно курсора в приложении). Ну кто играл в crimsonland или teeworlds меня поймет. В итоге при попытке воспользоваться SetCursorPos() курсор приложения ведет себя крайне неадекватно, ну т.е. или вообще не двигается, или уезжает не туда.
303
17 июня 2008 года
makbeth
1.0K / / 25.11.2004
Ну это надо спросить разработчиков приложения, как двигать ИХ курсор. Здесь, к сожалению, тебе вряд-ли помогут.
268
18 июня 2008 года
Михаил
587 / / 25.06.2005
как вариант послать сообщение wm_mousemove, wm_nchittest
38K
23 июня 2008 года
MoDErahN
5 / / 15.06.2008
Таак, я уже начал разбираться в чем дело. Курсор в приложении оказывается хитро устроен.
Координаты реального курсора, как оказалось, приложение всегда сохраняет равными координатам центра своего окна, а курсор приложения перемещается вот каким образом.
Когда пользователь двигает мышку, то приложение сравнивает текущие координаты курсора с координатами центра окна, смещает курсор приложения на полученную величину смещения win курсора, а сам win курсор возвращает обратно в центр окна.
Таким образом получается что GetCursorPos дает нам координаты win курсора, а не курсора приложения (которые нам какраз и надо). А для смещения курсора приложения с помощью SetCursorPos, нам необходимо знать координаты целевой точки относительно координат курсора приложения, и передать в SetCursorPos текущие координаты win курсора + приращение (которое и есть те самые относительные координаты, причем еще и ограничение на максимальное приращение есть, равное 395 пикселам, т.е. если надо добраться из точки (0, 0) в точку (500, 500) приходится делать два смещения курсора, cначала на (cursorpos.X + 395, cursorpos.Y + 395), а потом еще на (cursorpos.X + 105, cursorpos.Y + 105)).
Но я не знаю как мне узнать координаты курсора приложения. По всей видимости - никак, ну разве что дергать координаты прямо из приложения, но я данную задачу навряд-ли осилю.

Была идея заведомо обнулять координаты курсора приложения, давая смещение win курсору таким образом, чтобы курсор приложения в любом случае оказывался в верхнем левом углу, а уже потом, зная что исходные координаты (0, 0) смещать его в нужную точку. Но опять возникла проблема, видимо смещение курсора в приложении повешено не на событие, а организовано периодическим сравнением координат win курсора с эталонными (центром окна) через малые промежутки времени. В связи с этим, нельзя сделать искусственное перемещение курсора (ну со стороны моей программы) одним махом, приходится вставлять интервал времени между смещениями, что в итоге приводит к относительно медленному ступенчатому смещению.

Вот сижу и думаю, как еще можно организовать движение курсора, видимо никак :(
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог