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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2010, 18:58   #1
dueram
Пользователь
 
Регистрация: 24.11.2009
Сообщений: 12
По умолчанию Имитация движения мыши

Пишу функцию движения мыши mousemove(x,y) следующим образом:
Код:

Код:
tmo = y-rc.top;
nNCHitTest=SendMessage(hWnd, WM_NCHITTEST,0,(((y)<<16)+x));
PostMessage(hWnd, WM_SETCURSOR, (WPARAM)hWnd, (WM_MOUSEMOVE<<16)+nNCHitTest);
PostMessage(hWnd, WM_MOUSEMOVE, NULL, (((tmo)<<16)+x));
while(1)
{
SendMessage(hWnd, WM_NCHITTEST,0,(((y)<<16)+x));
}
При реальном движении мышью spy++ показывает, что других сообщений окну не идет (кроме wm_paint).

Но на деле между такой имитацией и реальным движением есть существенное различие:
при имитации мышь после прихода сразу пропадает. Например, если курсор пришел на ссылку в браузере, то она подчеркнется, но тут же придет в обычное состояние, как будто и не было никакой мыши. И так с любым объектом: стиль mouse_hovering пропадает тут же после наведения.

Уже третий день голову ломаю: что же это может быть?
dueram вне форума Ответить с цитированием
Старый 05.03.2010, 20:28   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
При реальном движении мышью spy++ показывает, что других сообщений окну не идет (кроме wm_paint).
Это происходит из-за того, что когда ты ведешь мышкой Windows генерирует сообщение WM_PAINT, которое сообщает окну, что некоторая его область не действительна и её нужно перерисовать.
profi вне форума Ответить с цитированием
Старый 01.04.2010, 22:52   #3
wexter
 
Регистрация: 01.04.2010
Сообщений: 8
По умолчанию

как сделать, что по изменению положения курсора например с помощью setcursorpos создавалось событие FormMouseMove. Это надо сделать над окном другого приложения.
wexter вне форума Ответить с цитированием
Старый 01.04.2010, 23:06   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

присмотритесь к сообщению WM_MOUSEMOVE
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.04.2010, 20:09   #5
wexter
 
Регистрация: 01.04.2010
Сообщений: 8
По умолчанию

спасибо, на своей форме уже при перемещении срабатывает onmousemove,

код такой
SendMessage (hwn, WM_MOUSEMOVE, 0, MakeLong (600,450));

а вот с другим окном делаю, там еще какая-то проверка
wexter вне форума Ответить с цитированием
Старый 02.04.2010, 22:38   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

через Spy++ или чтото подобное посмотрите сообщения что окно получает.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имитация клика мыши Anfall Общие вопросы Delphi 20 05.10.2010 09:15
Имитация движения (need help!) SnakeLight Общие вопросы Delphi 2 05.06.2009 22:32
Имитация клика мыши, не работает по Vista Аферук Общие вопросы Delphi 9 21.04.2009 15:45
Имитация клика мыши tipzozborova JavaScript, Ajax 1 04.03.2009 07:27
Имитация движения Napster Паскаль, Turbo Pascal, PascalABC.NET 0 20.01.2009 19:19