Использование SendMessage для имитации щелчков мышью пользователя

Мне нужно использовать SendMessage для имитации кликов пользователя в целевой программе, поскольку SendMessage блокируется до тех пор, пока событие, которое он запускает, не будет завершено. Причина этого в том, что эта блокировка дает возможность определить, открылись ли какие-либо диалоги в результате нажатия. Моя проблема в настоящее время заключается в том, что, хотя я могу заставить работать щелчок, используя сообщения WM_LBUTTONDOWN и WM_LBUTTONUP последовательно на кнопке в макете формы, которая открывает диалоговое окно модели, я не могу заставить его работать с меню и элементами меню в стандартном приложении Windows ( Блокнот). Любая помощь в получении возможности выполнять щелчки по элементам меню так, как это работает, будет оценена. Я уже могу определить, является ли это пунктом меню, просто нужно иметь возможность имитировать щелчок по нему с блокировкой с помощью SendMessage.

Ваше здоровье

Росс


person Ross    schedule 27.04.2009    source источник
comment
Не уверен, что полностью понял вопрос: вы хотите блокировать или не хотите блокировать? Пробовали ли вы использовать SendInput - это обычный способ имитации ввода с помощью мыши/клавиатуры. Обычно вам нужно соединить его с каким-либо другим способом обнаружения результатов ввода, например. использование WinEvents для обнаружения появления диалогового окна или меню. Также существуют тестовые фреймворки, которые делают большую часть этой работы за вас.   -  person BrendanMcK    schedule 20.02.2012


Ответы (1)


К сожалению, на этой странице перехватчики win32 говорится

Имитировать ввод с помощью мыши и клавиатуры (WH_JOURNALPLAYBACK). Хуки обеспечивают единственный надежный способ имитации этих действий. Если вы попытаетесь имитировать эти события, отправив или опубликовав сообщения, внутренние компоненты Windows не обновят состояние клавиатуры или мыши, что может привести к непредвиденному поведению. Если перехватчики используются для воспроизведения событий клавиатуры или мыши, эти события обрабатываются точно так же, как настоящие события клавиатуры или мыши.

Таким образом, похоже, что вам, возможно, придется прибегнуть к какой-либо функции, подобной записи макросов, для автоматического тестирования с использованием WH_JOURNALRECORD и WH_JOURNALPLAYBACK?

person binarybob    schedule 29.04.2009
comment
Ссылка устарела, вот более новая: msdn.microsoft.com/en-us/library/windows/desktop/ - person Qwerty01; 28.01.2014