Перехватывать каждый щелчок мыши в приложении WPF

Я пытаюсь перехватить каждый щелчок мышью в моем приложении WPF. Кажется, это должно быть легко с механизмом маршрутизации команд, но извините, я ничего не нашел.

Мое приложение реализует несколько уровней безопасности и требует автоматического возврата к наиболее ограничивающему уровню, если никто не взаимодействует с приложением (щелкает) в течение x минут. Мой план состоит в том, чтобы добавить таймер, который истекает через x минут и регулирует уровень безопасности. Каждый щелчок мышью в приложении сбрасывает таймер.

3 ответа

Решение

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

public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            EventManager.RegisterClassHandler(typeof(Window), Window.PreviewMouseDownEvent, new MouseButtonEventHandler(OnPreviewMouseDown));

            base.OnStartup(e);
        }

        static void OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            Trace.WriteLine("Clicked!!");
        }
    }

Это справится с любым PreviewMouseDown событие в любом окне, созданном в приложении.

<Window .... PreviewMouseDown="Window_PreviewMouseDown_1">
</Window>

Это должно работать для вас.

Это срабатывает, даже если другие MouseDown События запускаются для компонентов, которые он содержит.

Согласно предложению Клеменса в комментариях, PreviewMouseDown это лучший выбор, чем MouseDown, так как это гарантирует, что вы не сможете остановить всплывающее событие в другом событии.

У вас есть несколько вариантов:

Низкоуровневый хук мыши: http://filipandersson.multiply.com/journal/item/7?&show_interstitial=1&u=%2Fjournal%2Fitem

Решение WPF (я бы проверил, делает ли это в первую очередь то, что вам нужно): WPF. Поймать последний щелчок окна

Другие вопросы по тегам