2012-11-05 11 views
7

私のWPFアプリケーションでマウスのクリックをすべて傍受しようとしています。これはコマンドルーティングの仕組みでは簡単だと思われますが、何も見つけられないのは残念です。WPFアプリケーションへのすべてのマウスクリックを傍受する

私のアプリケーションはいくつかのセキュリティレベルを実装しています。誰も(x)分で​​アプリケーションとやりとり(クリック)しなければ、最も制限の厳しいレベルに自動的に戻す必要があります。私の計画は、x分後に期限が切れ、セキュリティレベルを調整するタイマーを追加することです。各マウスをクリックすると、タイマーがリセットされます。

+1

マウスを使用していないため、喜んで入力してアプリケーションをロックすることはないと思いますか? – Ian

+0

申し訳ありませんが、皆様、遅延のために...この月曜日の朝に働いていましたが、何かに引っ張られました。ありがとう、すぐにこれに戻るでしょう – nmarler

答えて

16

あなたは、クラスハンドラを登録することができます

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イベントを処理します。

+0

うわー、これに戻るには長い時間がかかりましたが、最終的に時間を見つけました。 @ baboon一度登録してそれを忘れることをお勧めします。素晴らしいことです。ありがとうございました – nmarler

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

これはうまくいくはずです。

他のMouseDownイベントが含まれているコンポーネントに対して発生する場合でも、このイベントは発生します。

コメント内のClemensの示唆によれば、よりもPreviewMouseDownのほうが良い選択です。違うイベントで起こったイベントのバブリングを止めることはできません。

+2

おそらく[PreviewMouseDown](http://msdn.microsoft.com/en-us/library/system.windows.uielement.previewmousedown.aspx)する必要があります。 – Clemens

+0

非常に良い点。 :) –

+1

多くのコントロールがこれらのイベントを処理できるように、バブリングされたイベントを使用することは、彼の場合は常に悪い考えです。トンネリングされたバージョン(PreviewMouseDown)を使用する方が良いアイデアです。編集:おっと、それほど速くはありません:)これを除いて、これは私のために行く方法のようです:) – Sisyphe

関連する問題