Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2008, 20:38   #1
MoDErahN
 
Регистрация: 15.06.2008
Сообщений: 8
По умолчанию Вопрос по перемещению курсора

Собственно вопросец небольшой, но порядком мне попортивший нервы. Обыскался весь уже в поисках ответа.
Как переместить курсор в известную мне точку в стороннем приложении?
SetCursorPos() не предлагать, т.к. приложение имеет самостоятельный курсор (даже при простом сворачивании-разворачивании обычный курсор смещается относительно курсора в приложении. Если же окно приложения не активно, то курсор в нем застывает и win курсор перемещается совершенно отдельно от него). Ну кто играл в crimsonland или teeworlds меня поймет. В итоге при попытке воспользоваться SetCursorPos() курсор приложения ведет себя крайне неадекватно, ну т.е. или вообще не двигается, или уезжает не туда.
Предлагайте любые альтернативные способы смещения курсора, буду пробовать.

Последний раз редактировалось MoDErahN; 15.06.2008 в 21:03.
MoDErahN вне форума Ответить с цитированием
Старый 16.06.2008, 13:11   #2
master-sheff
Пользователь
 
Аватар для master-sheff
 
Регистрация: 16.06.2008
Сообщений: 39
По умолчанию

Неочень понял суть, опиши полудше, у тебя что игра?
Возможно тебе поможет проверка, на активность твоего приложения, если активно, то перемещаеш SetCursorPos, если неактивно до забиваеш на него.
master-sheff вне форума Ответить с цитированием
Старый 17.06.2008, 00:24   #3
MoDErahN
 
Регистрация: 15.06.2008
Сообщений: 8
По умолчанию

Таак, я уже начал разбираться в чем дело. Курсор в приложении оказывается хитро устроен.
Координаты реального курсора, как оказалось, приложение всегда сохраняет равными координатам центра своего окна, а курсор приложения перемещается вот каким образом.
Когда пользователь двигает мышку, то приложение сравнивает текущие координаты курсора с координатами центра окна, смещают курсор приложения на полученную величину смещения 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 курсора с эталонными (центром окна) через малые промежутки времени. В связи с этим, нельзя сделать искусственное перемещение курсора (ну со стороны моей программы) одним махом, приходится вставлять интервал времени между смещениями, что в итоге приводит к относительно медленному ступенчатому смещению.

Вот сижу и думаю, как еще можно организовать движение курсора.
MoDErahN вне форума Ответить с цитированием
Старый 18.06.2008, 11:49   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Попробуй с помощью ArtMoney поискать координаты (например, поиском неизвестного значения). Правда в ArtMoney придётся без мышки работать; но если выбрать в начале процесс и не лезть в меню и в таблицу с адресами, а только искать, то это и без мышки работает.
Somebody вне форума Ответить с цитированием
Старый 18.06.2008, 20:53   #5
Iceman
Форумчанин
 
Регистрация: 08.07.2007
Сообщений: 154
По умолчанию

var p:Tpoint;x,y:integer;
...
x:=..;
y:=..;
p.x:=x;
p.y:=y;
mouse.cursorpos:=p;
...

в х и у записивай положение курсора. после сворачивания ети переменные останутса в оп. памяти.
Iceman вне форума Ответить с цитированием
Старый 23.06.2008, 04:17   #6
MoDErahN
 
Регистрация: 15.06.2008
Сообщений: 8
По умолчанию

Да знаю я это, проблема в другом. Проблема в том, что таким образом мы переместим win курсор в нужную точку, а не курсор приложения (как он работает я расписал в предыдущем посте).
MoDErahN вне форума Ответить с цитированием
Старый 23.06.2008, 10:44   #7
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

А что за прога?
Somebody вне форума Ответить с цитированием
Старый 23.06.2008, 12:43   #8
NikLik
Форумчанин
 
Аватар для NikLik
 
Регистрация: 22.11.2007
Сообщений: 224
По умолчанию

sendmessage с wm_mousemove пробовал?
NikLik вне форума Ответить с цитированием
Старый 24.06.2008, 01:05   #9
MoDErahN
 
Регистрация: 15.06.2008
Сообщений: 8
По умолчанию

NikLik, да нет никакой проблемы сдвинуть курсор, читай 2-й мой пост. Вся проблема в том, как узнать координаты курсора приложения.
MoDErahN вне форума Ответить с цитированием
Старый 19.03.2010, 10:53   #10
DarkHacker
Форумчанин
 
Аватар для DarkHacker
 
Регистрация: 12.04.2008
Сообщений: 105
По умолчанию

Напиши что ты делаешь,может тогда будет яснее? НЕ бота случайно?))
DarkHacker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисунок курсора Fellics{новичок} Помощь студентам 2 25.05.2008 20:04
Позиция курсора Манжосов Денис :) Помощь студентам 3 25.04.2008 16:56
Определяем вид курсора Komersant Win Api 3 09.10.2007 11:23
Координаты курсора Haster Win Api 8 06.08.2007 12:04
положение курсора mishel Общие вопросы Delphi 9 30.01.2007 21:37