Перехватывать каждый щелчок мыши в приложении 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. Поймать последний щелчок окна