2009-08-22 29 views
94

Come si ottiene la posizione del mouse? Lo voglio in termini di posizione dello schermo.Posizione del mouse in C#

Avvio il programma che desidero impostare sulla posizione corrente del mouse.

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

Edit: questo deve accadere prima che si crea la forma.

risposta

149

È necessario utilizzare System.Windows.Forms.Cursor.Position: "Un punto che rappresenta la posizione del cursore nelle coordinate dello schermo."

+1

Cursor.Position visualizza il mio modo tooltip fuori campo: (- –

+19

@Thomas Eyde: Sto cercando di indovinare, ma che potrebbe essere poiché la posizione del mouse è nelle coordinate dello schermo e la posizione del tooltip è relativa alla finestra principale? Potrebbe essere necessario utilizzare 'PointToClient'. – RichieHindle

+0

Sì, è quello che dovevo. –

16

Cursor.Position otterrà il poisition schermata corrente del mouse (se si è in una Control, la proprietà MousePosition riceverà anche lo stesso valore).

Per impostare la posizione del mouse, si dovrà utilizzare Cursor.Position e dargli una nuova Point:

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

È possibile farlo nel metodo Main prima di creare il modulo.

69

Se non si desidera fare riferimento Forms è possibile utilizzare interoperabilità per ottenere la posizione del cursore:

/// <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

Come fare riferimento al tipo di POINT? –

+1

Aggiungere riferimento a System.Drawing –

+0

No 'using's. Semplicemente non funziona. –

13

Per rispondere alla tua esempio specifico:

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

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

Non dimenticare di aggiungere using System.Windows.Forms; , e aggiungendo il riferimento ad esso (tasto destro su riferimenti> aggiungere il riferimento> NET> scheda Systems.Windows.Forms> ok)

10
System.Windows.Forms.Control.MousePosition 

Gets the position of the mouse cursor in screen coordinates. "La proprietà Posizione è identica alla proprietà Control.MousePosition."

+4

Non c'è bisogno di essere scortesi. Questa è un'alternativa alla risposta primaria. Preferisco solo questo perché l'altro 'Cursore.Posizione 'suona come un cursore di testo tipo IMHO e' MousePosition 'è più ovvio. – James

+3

@Jan Dvorak certo, e sì l'ho pensato forse utile. Avrei detto qualcosa di simile "Per favore potresti inserire qualche ulteriore informazione in modo da poter vedere come questo possa differire dalle risposte date in precedenza?" – James

+0

@JanDvorak Se pensi che le one-liner non siano d'aiuto (btw, lo fanno) allora non dipende se la domanda ha 1 giorno o 3 anni. +1 per approccio alternativo. – nawfal

3

Inizializza il cursore corrente. Usatelo per ottenere la posizione di 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; 
    } 

}

Problemi correlati