2016-06-30 3 views
0

私はマウスを非同期に動かすプログラムを持っています。私のプログラムでは、非同期プロセスはボタンを押すことで中断できます。ユーザーがマウスを移動し、非同期プロセスを実行中止比べたときに、イベントをキャッチすることが可能にするにはどうすればよいWPFはユーザーマウスの動きをキャッチ

?また、マウスがwpfコントロールの外側に移動するとき。

XAML:

<Button Height="20" Width="40" Click="Button_Click" ></Button> 

コード:

namespace WpfApplication2 
{ 
    public partial class MainWindow : Window 
    { 

     WorkWithMouse WWM = new WorkWithMouse(); 

     public MainWindow() 
     { 
      InitializeComponent(); 
      WWM.MouveMouseAsync(); 
     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      WWM.AbortMouseMove(); 
     } 
     private void Window_MouseMove(object sender, MouseEventArgs e) 
     { 
      Console.WriteLine("Moving"); 
     } 
    } 

    public class WorkWithMouse 
    { 
     CancellationTokenSource cancelTokenSource = new CancellationTokenSource(); 

     [DllImport("User32.dll")] 
     private static extern bool SetCursorPos(int X, int Y); 

     public void AbortMouseMove() 
     { 
      cancelTokenSource.Cancel(); 
     } 

     public void MouveMouseAsync() 
     { 
      Action<CancellationToken> task = new Action<CancellationToken>(MoveMouse); 
      IAsyncResult result = task.BeginInvoke(cancelTokenSource.Token, null, null); 
     } 
     private void MoveMouse(CancellationToken token) 
     { 
      int i = 100; 
      while (!token.IsCancellationRequested) 
      { 
       System.Threading.Thread.Sleep(2000); 
       SetCursorPos(i, 100); 
       i = i + 1; 
      } 
     } 
    } 

答えて

1

あなたがアプリケーション内でクリックされない場合がありますように、P /呼び出しを経由して世界的なマウスイベントにフックする必要があります。

How to detect mouse clicks?

+0

私はNuGet、https://github.com/gmamaladze/globalmousekeyhookからMouseKeyHookを使用して私の問題を解決します。 – A191919

関連する問題