Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.09.12;
Скачать: CL | DM;

Вниз

WM_LBUTTONDOWN обрабатывается не сразу   Найти похожие ветки 

 
И. Павел ©   (2010-06-18 10:41) [0]

Здравствуйте. Мне нужно щелкнуть мышью в определенном месте окна чужой программы. Но выполнение моей программы застревает на:
SendMessage(H, WM_LBUTTONDOWN, WParam(0), MakeLParam(x, y))
То есть это сообщение не обрабатывается чужой программой, пока я не наведу мышь на одно из ее окон (не важно, будет ли оно родительское тому, на котором я щелкаю). Пытался делать окно активным (хотя оно изначально активное :) и foreground, посылать MouseMove, SetCapture. Ничего не получается. WM_LBUTTONDOWN обрабатывается только после того, как я наведу мышь на одно из окон чужой программы.

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

Подскажите, пожалуйста, какое сообщение ждет программа? Как сделать так, чтобы SendMessage(H, WM_LBUTTONDOWN, WParam(0), MakeLParam(x, y)) обрабатывался окном сразу?


 
Сергей М. ©   (2010-06-18 10:59) [1]

1. Запрети мышиный ввод
2. Запомни тек.координаты мышиного курсора
3. Установи курсор в нужную точку нужного окна
4. Эмулируй мышиный клик (mouse_event)
5. Верни курсор на место по запомненным на шаге 2 координатам
6. Разреши мышиный ввод

Всех делов)
Юзер даже глазом не успеет моргнуть.


 
И. Павел ©   (2010-06-18 11:55) [2]

> [1] Сергей М. ©   (18.06.10 10:59)

Спасибо.

Но похоже я поторопился с выводом насчет перемещения мыши... Заблокировал ввод, переместил мышь, подвигал ею, потом вызвал SendMessage - но WM_LBUTTONDOWN все равно вернулся только после перемещения мыши вручную. Видимо, обработчик WM_LButtonDown ждет перемещение мыши и только потом завершается. Пришлось создать параллельно с SendMessage поток, перемещающий мышь - только так все заработало :)


 
Сергей М. ©   (2010-06-18 12:00) [3]


> потом вызвал SendMessage - но WM_LBUTTONDOWN


Не пойму чем тебе mouse_event() для эмуляции клика не угодил ?
Или ты хочешь таким макаром эмулировать только нажатие кнопки, а отжимать ее будет типа Пушкин ?


 
И. Павел ©   (2010-06-18 13:31) [4]

> Не пойму чем тебе mouse_event() для эмуляции клика не угодил
> ?

Я хотел управлять окнами, не вынося их на передний план.


> Или ты хочешь таким макаром эмулировать только нажатие кнопки

WM_MOUSEUP тоже потом посылается.


 
Игорь Шевченко ©   (2010-06-18 14:45) [5]

Сообщения от мыши и клавиатуры ставятся в очередь, а не передаются непосредственно оконной процедуре. Поэтому
PostMessage, SendMessageCallback, SendNotifyMessage и т.п.


 
И. Павел ©   (2010-06-18 14:55) [6]

> [5] Игорь Шевченко ©   (18.06.10 14:45)

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


 
DiamondShark ©   (2010-06-18 15:12) [7]


>  Но мне нужно дождаться, когда произойдет щелчок, и только
> потом выполнять другие действия.

SendMessageCallback


 
И. Павел ©   (2010-06-18 15:34) [8]

> [7] DiamondShark ©   (18.06.10 15:12)

Если бы алгоритм можно было разделить на 2 шага, то это было бы удобно, но в моей задаче, ИМХО, так выйдет еще запутаннее, чем с SendMessage + второй поток для WM_MOUSEMOVE.



Страницы: 1 вся ветка

Текущий архив: 2010.09.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
15-1275724071
Виталий
2010-06-05 11:47
2010.09.12
Хочу разобраться с реализацией алгоритма Эйлерова цикла


2-1275988122
worldmen
2010-06-08 13:08
2010.09.12
Структура файлов караоке - kar. Или как извлеч текст


2-1276854352
terra
2010-06-18 13:45
2010.09.12
как заблокировать колонки в StringGrid


15-1276767929
ocean
2010-06-17 13:45
2010.09.12
Сценарий входа пользователя в AD


2-1273666789
Igor_VM
2010-05-12 16:19
2010.09.12
Обмен сообщениями в формате XML по протоколу HTTPS