Как повторить щелчок мыши в .NET
Вопрос
Мое приложение запускается как плагин внутри другого оконного приложения.Таким образом, мое окно часто не имеет фокуса.Теперь, если кто-то наведет курсор мыши на кнопку / меню и нажмет один раз, все, что он сделает, это установит фокус на мое окно.Затем (ы) ему нужно нажать еще раз, чтобы получить фактическую функциональность кнопки.
Это небольшое раздражение, но я бы хотел от него избавиться.Сначала я попытался требовать фокусировки всякий раз, когда мышь попадает в мое диалоговое пространство, но это оказалось еще более раздражающим.Итак, что я хотел бы сделать, это повторить щелчок мыши, чтобы это выглядело так, как будто одним щелчком мыши был изменен фокус И нажата кнопка.
Очевидно, что я должен делать это ТОЛЬКО тогда, когда щелчок привел к SetFocus , в противном случае функция button будет запущена дважды.
Есть какие-нибудь предложения?
Глубоко и навечно в долгу, Дэвид
Решение
Моделирование щелчка мыши здесь кажется немного запутанным, но вы всегда можете имитировать любой щелчок мыши в любой точке (X, Y) с помощью API отправки данных через P/Invoke:
[DllImport("user32.dll", SetLastError=true)]
static extern uint SendInput(uint nInputs, INPUT [] pInputs, int cbSize);
Вы также можете повозиться с распространением / генерацией сообщений WM_MOUSEXXXXX напрямую, но я много играл с этим и поверьте мне, когда я говорю, что это полный бред.
Другие советы
Я бы посоветовал вам сохранить поведение как есть;это стандартное поведение для операционной системы, и его изменение может нарушить стандартные рекомендации по удобству использования.