Форум: "Прочее";
Текущий архив: 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