Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.09.12;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





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


2-1276760149
john-s
2010-06-17 11:35
2010.09.12
Не могу добавить данные типа float в mysql


15-1276520714
AKE
2010-06-14 17:05
2010.09.12
Что такое atom?


2-1276593784
Pavel
2010-06-15 13:23
2010.09.12
Работа с dbf-таблицами


2-1276375219
AKE
2010-06-13 00:40
2010.09.12
Как получить координаты всех точек?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский