2012-04-26 34 views
5

Quiero obtener la posición del mouse relativa a las coordenadas de la pantalla. Estoy usando el siguiente código para hacer eso.Mouse Move not trigger outside WPF Ventana principal

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

Está funcionando como se esperaba. Pero mi evento MouseMove no se dispara fuera de MainWindow. Eso es si muevo mi mouse sobre el escritorio con mi ventana restaurada.

Cualquier idea apreciada.

Respuesta

8

Utilice el método CaptureMouse().

Para su ejemplo anterior, se podría añadir:

window.CaptureMouse(); 

en su código subyacente dentro del controlador de eventos MouseDown.

A continuación, deberá llamar a:

window.ReleaseMouseCapture(); 

en su código subyacente dentro del controlador de eventos MouseUp.

+0

¡Muy útil! gracias – DevEstacion

1

Necesitaba ser capaz de capturar la posición del mouse fuera de la ventana WPF independientemente de cualquier botón del mouse presionado. Terminé usando Interop para llamar a un WINAPI GetCursorPos combinado con un hilo en lugar de un evento para la ventana.

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(); 
    } 
} 

Funciona great!

+0

La interfaz de usuario está bloqueada ... – pix

+0

Vaya, lo siento, sueño (0) es un error obvio, cámbielo a otra cosa como 100, según su actualización – Peheje

Cuestiones relacionadas