2009-08-22 27 views
94

¿Cómo obtengo la posición del mouse? Lo quiero en términos de posición de pantalla.Obteniendo la posición del mouse en C#

Comienzo de mi programa Quiero establecer la posición actual del mouse.

Location.X = ?? 
Location.Y = ?? 

Editar: esto debe ocurrir antes de crear el formulario.

Respuesta

149

Debe usar System.Windows.Forms.Cursor.Position: "Un punto que representa la posición del cursor en coordenadas de pantalla".

+1

Cursor.Position muestra mi camino fuera de la pantalla información sobre herramientas: (- –

+19

@Thomas Eyde: Estoy adivinando, pero podría ser que porque la posición del mouse está en coordenadas de pantalla y la posición de la información sobre herramientas es relativa a su ventana principal? Es posible que necesite usar 'PointToClient'. – RichieHindle

+0

Sí, eso es lo que tenía que hacer. –

16

Cursor.Position obtendrá el poisition pantalla actual del ratón (si se encuentra en un Control, la propiedad MousePosition también tendrá el mismo valor).

Para ajustar la posición del ratón, tendrá que utilizar Cursor.Position y darle una nueva Point:

Cursor.Position = new Point(x, y); 

Puede hacer esto en su método de Main antes de crear el formulario.

69

Si no desea hacer referencia a las formas que se pueden utilizar de interoperabilidad para obtener la posición del cursor:

/// <summary> 
/// Struct representing a point. 
/// </summary> 
[StructLayout(LayoutKind.Sequential)] 
public struct POINT 
{ 
    public int X; 
    public int Y; 

    public static implicit operator Point(POINT point) 
    { 
     return new Point(point.X, point.Y); 
    } 
} 

/// <summary> 
/// Retrieves the cursor's position, in screen coordinates. 
/// </summary> 
/// <see>See MSDN documentation for further information.</see> 
[DllImport("user32.dll")] 
public static extern bool GetCursorPos(out POINT lpPoint); 

public static Point GetCursorPosition() 
{ 
    POINT lpPoint; 
    GetCursorPos(out lpPoint); 
    //bool success = User32.GetCursorPos(out lpPoint); 
    // if (!success) 

    return lpPoint; 
} 
+1

¿Cómo derivar el tipo de punto? –

+1

Agregar referencia a System.Drawing –

+0

No 'using's. Simplemente no funciona. –

13

para responder a su ejemplo específico:

// your example 
Location.X = Cursor.Position.X; 
Location.Y = Cursor.Position.Y; 

// sample code 
Console.WriteLine("x: " + Cursor.Position.X + " y: " + Cursor.Position.Y); 

No se olvide de añadir using System.Windows.Forms; y agregando la referencia al mismo (haga clic derecho en referencias> agregar referencia> pestaña .NET> Systems.Windows.Forms> ok)

10
System.Windows.Forms.Control.MousePosition 

Gets the position of the mouse cursor in screen coordinates. "La propiedad Posición es idéntica a la propiedad Control.MousePosition".

+4

No hay necesidad de ser grosero. Esta es una alternativa a la respuesta principal. Solo prefiero este porque el otro 'Cursor'.La posición 'suena como un cursor de tipo texto en mi humilde opinión y' MousePosition 'es más obvio. – James

+3

@Jan Dvorak seguro, y sí, pensé que podría ser útil. Hubiera dicho algo así: "¿Podrían incluir un poco más de información para que pueda ver cómo puede diferir de las respuestas dadas anteriormente?" – James

+0

@JanDvorak Si crees que los one-liners no ayudan (por cierto, lo hacen), entonces no depende de si la pregunta tiene 1 día o 3 años. +1 para un enfoque alternativo. – nawfal

3

Inicialice el cursor actual. Se usa para obtener la posición de X e Y

this.Cursor = new Cursor(Cursor.Current.Handle); 
int posX = Cursor.Position.X; 
int posY = Cursor.Position.Y; 
2
internal static class CursorPosition { 
    [StructLayout(LayoutKind.Sequential)] 
    public struct PointInter { 
    public int X; 
    public int Y; 
    public static explicit operator Point(PointInter point) => new Point(point.X, point.Y);  
    } 

    [DllImport("user32.dll")] 
    public static extern bool GetCursorPos(out PointInter lpPoint); 

    // For your convenience 
    public static Point GetCursorPosition() { 
    PointInter lpPoint; 
    GetCursorPos(out lpPoint); 
    return (Point) lpPoint; 
    } 

}

Cuestiones relacionadas