【问题标题】:WPF catch user mouse movementWPF 捕捉用户鼠标移动
【发布时间】:2016-06-30 19:01:06
【问题描述】:

我有一个异步移动鼠标的程序。在我的程序中,可以通过按下按钮中止异步进程。

当用户移动鼠标而不是中止正在运行的异步进程时,如何捕获事件?当鼠标移出 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;
            }
        }
    }

【问题讨论】:

    标签: c# wpf mouseevent


    【解决方案1】:

    您需要通过 P/Invoke 挂钩全局鼠标事件,因为您可能没有在应用程序中单击。

    How to detect mouse clicks?

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多