![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 15.06.2008
Сообщений: 8
|
![]()
Собственно вопросец небольшой, но порядком мне попортивший нервы. Обыскался весь уже в поисках ответа.
Как переместить курсор в известную мне точку в стороннем приложении? SetCursorPos() не предлагать, т.к. приложение имеет самостоятельный курсор (даже при простом сворачивании-разворачивании обычный курсор смещается относительно курсора в приложении. Если же окно приложения не активно, то курсор в нем застывает и win курсор перемещается совершенно отдельно от него). Ну кто играл в crimsonland или teeworlds меня поймет. В итоге при попытке воспользоваться SetCursorPos() курсор приложения ведет себя крайне неадекватно, ну т.е. или вообще не двигается, или уезжает не туда. Предлагайте любые альтернативные способы смещения курсора, буду пробовать. Последний раз редактировалось MoDErahN; 15.06.2008 в 21:03. |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 16.06.2008
Сообщений: 39
|
![]()
Неочень понял суть, опиши полудше, у тебя что игра?
Возможно тебе поможет проверка, на активность твоего приложения, если активно, то перемещаеш SetCursorPos, если неактивно до забиваеш на него. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 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 курсора с эталонными (центром окна) через малые промежутки времени. В связи с этим, нельзя сделать искусственное перемещение курсора (ну со стороны моей программы) одним махом, приходится вставлять интервал времени между смещениями, что в итоге приводит к относительно медленному ступенчатому смещению. Вот сижу и думаю, как еще можно организовать движение курсора. |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
![]()
Попробуй с помощью ArtMoney поискать координаты (например, поиском неизвестного значения). Правда в ArtMoney придётся без мышки работать; но если выбрать в начале процесс и не лезть в меню и в таблицу с адресами, а только искать, то это и без мышки работает.
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 08.07.2007
Сообщений: 154
|
![]()
var p:Tpoint;x,y:integer;
... x:=..; y:=..; p.x:=x; p.y:=y; mouse.cursorpos:=p; ... в х и у записивай положение курсора. после сворачивания ети переменные останутса в оп. памяти. |
![]() |
![]() |
![]() |
#6 |
Регистрация: 15.06.2008
Сообщений: 8
|
![]()
Да знаю я это, проблема в другом. Проблема в том, что таким образом мы переместим win курсор в нужную точку, а не курсор приложения (как он работает я расписал в предыдущем посте).
|
![]() |
![]() |
![]() |
#7 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
![]()
А что за прога?
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 22.11.2007
Сообщений: 224
|
![]()
sendmessage с wm_mousemove пробовал?
|
![]() |
![]() |
![]() |
#9 |
Регистрация: 15.06.2008
Сообщений: 8
|
![]()
NikLik, да нет никакой проблемы сдвинуть курсор, читай 2-й мой пост. Вся проблема в том, как узнать координаты курсора приложения.
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 12.04.2008
Сообщений: 105
|
![]()
Напиши что ты делаешь,может тогда будет яснее? НЕ бота случайно?))
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Рисунок курсора | 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 |