nmarler
nmarler

Reputation: 1436

Intercept every mouse click to WPF application

I'm looking to intercept every mouse click in my WPF application. Seems this should be easy with the command routing mechanism, but sorry I'm not finding anything.

My application implements several security levels, and has the requirement to automatically revert to the most restrictive level if no one interacts with (clicks) the application in x minutes. My plan is to add a timer that expires after x minutes and adjusts the security level. Each mouse click into the application will reset the timer.

Upvotes: 11

Views: 16490

Answers (3)

Louis Kottmann
Louis Kottmann

Reputation: 16648

You can register a class handler:

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!!");
        }
    }

This will handle any PreviewMouseDown event on any Window created in the application.

Upvotes: 24

Anders Arpi
Anders Arpi

Reputation: 8417

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

This should work for you.

This fires even if other MouseDown events fire for components that it contains.

As per Clemens suggestion in the comments, PreviewMouseDown is a better choice than MouseDown, as that makes sure you can't stop the event bubbling from happening in a different event.

Upvotes: 3

Kir
Kir

Reputation: 3072

You have a few options:

Low level mouse hook: http://filipandersson.multiply.com/journal/item/7?&show_interstitial=1&u=%2Fjournal%2Fitem

WPF Solution (I'd check to see if this does what you need first): WPF. Catch last window click anywhere

Upvotes: 0

Related Questions