Главная страница
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.012 c
2-1276374865
AKE
2010-06-13 00:34
2010.09.12
Как нарисовать закрашенный треугольник?


2-1276166904
avgshron
2010-06-10 14:48
2010.09.12
CRC по модулю 256


15-1276689705
AKE
2010-06-16 16:01
2010.09.12
Есть ли аналог TBitmap в Visual c++?


2-1277100140
Mishenka
2010-06-21 10:02
2010.09.12
Откуда берутся надписи в стандартных компонентах?


2-1276338216
forNeXt-13
2010-06-12 14:23
2010.09.12
Как сделать ValueListEditor в возможностью выбора