Перемещение мыши не запускается за пределами главного окна WPF

Я хочу получить положение мыши относительно координат экрана. Для этого я использую следующий код.

window.PointToScreen(Mouse.GetPosition(window));

Он работает как положено. Но мое событие MouseMove не запускается за пределами MainWindow. То есть, если я наведу указатель мыши на рабочий стол с восстановленным окном.

Любые идеи приветствуются.


person WPF Lover    schedule 26.04.2012    source источник


Ответы (2)


Используйте метод CaptureMouse ().

В приведенном выше примере вы можете добавить:

window.CaptureMouse();

в коде программной части внутри обработчика событий MouseDown.

Затем вам нужно позвонить:

window.ReleaseMouseCapture();

в коде программной части внутри обработчика событий MouseUp.

person Curtis    schedule 26.04.2012

Мне нужно было иметь возможность фиксировать положение мыши вне окна WPF независимо от нажатой кнопки мыши. В итоге я использовал Interop для вызова WINAPI GetCursorPos в сочетании с потоком вместо события для окна.

using System.Runtime.InteropServices;
using Point = System.Drawing.Point;

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetCursorPos(ref Point lpPoint);

 public MainWindow()
    {
        InitializeComponent();

        new Thread(() =>
        {
            while (true)
            {
                //Logic
                Point p = new Point();
                GetCursorPos(ref p);

                //Update UI
                Dispatcher.BeginInvoke(new Action(() =>
                {
                    Position.Text = p.X + ", " + p.Y;
                }));

                Thread.Sleep(100);
            }
        }).Start();
    }
}

Работает отлично!

person Peheje    schedule 05.05.2015
comment
К сожалению, я сплю (0) это очевидная ошибка, измените его на что-то другое, например 100, в зависимости от обновления ur - person Peheje; 24.03.2016