Как обнаружить щелчки мыши, не прослушивая никаких событий мыши, определенных в элементах управления каркасом? - PullRequest
3 голосов
/ 01 февраля 2011

Можно ли обнаружить щелчки мыши, не прослушивая какие-либо события мыши, определенные в элементах управления каркасом?

Я имею в виду, я не хочу писать такой код, как:

  control.MouseLeftButtonDown += this.HandleMouseLeftButtonDown;

ПокаЯ хочу знать, нажимает ли пользователь на экран или нет.Возможно ли это в C # (WPF или Silverlight)?

Ответы [ 5 ]

8 голосов
/ 01 февраля 2011

Вы можете зарегистрировать обработчик класса в статическом конструкторе вашего основного окна, например:

static MainWindow() {
    EventManager.RegisterClassHandler(typeof (MainWindow),
                                      Mouse.MouseDownEvent,
                                      new MouseButtonEventHandler(OnGlobaMouseDown));
}

Это будет глобальный обработчик для всех событий MouseDown.

4 голосов
/ 01 февраля 2011

Вы можете использовать Win32 API и обнаружить сообщение мыши WM_MOUSE, что-то вроде этого:

http://support.microsoft.com/kb/318804

или этот пример, показывающий использование глобального сообщения мыши WM_MOUSE_LL:

http://www.codeproject.com/KB/cs/globalhook.aspx

3 голосов
/ 01 февраля 2011

Это делается путем захвата мыши.Который заставляет любое событие мыши быть направленным на вас, даже если оно выходит за пределы окна.Метод Mouse.Capture ().

1 голос
/ 01 февраля 2011

Если вам нужно обрабатывать события мыши всех ваших приложений, лучше всего подписаться на InputManager событий.

0 голосов
/ 21 января 2013

"Я имею в виду, я не хочу писать код вроде:

control.MouseLeftButtonDown + = this.HandleMouseLeftButtonDown; "

Вы всегда можете использовать:

if (Mouse.LeftButton == MouseButtonState.Pressed)
{
     ...
}

Вы должны будете включить это, хотя.

using System.Windows.Input;

Это работает для меня в wpf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...