121 votes

Obtenir la position de la souris en c#

Comment puis-je obtenir la position de la souris ? Je veux qu'elle soit exprimée en termes de position de l'écran.

Je lance mon programme que je veux régler sur la position actuelle de la souris.

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

Edit : Cela doit se faire avant la création du formulaire.

187voto

RichieHindle Points 98544

Vous devez utiliser Position du curseur (System.Windows.Forms.Cursor.Position) : "Un point qui représente la position du curseur en coordonnées d'écran".

2 votes

Cursor.Position affiche mon infobulle bien en dehors de l'écran :(-)

25 votes

@Thomas Eyde : Je devine, mais cela pourrait-il être dû au fait que la position de la souris est en coordonnées d'écran et que la position de votre infobulle est relative à sa fenêtre parente ? Vous pourriez avoir besoin d'utiliser PointToClient .

0 votes

Oui, c'est ce que je devais faire.

96voto

Mo0gles Points 2624

Si vous ne voulez pas référencer les formulaires, vous pouvez utiliser interop pour obtenir la position du curseur :

using System.Runtime.InteropServices;
using System.Windows; // Or use whatever point class you like for the implicit cast operator

/// <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);
    // NOTE: If you need error handling
    // bool success = GetCursorPos(out lpPoint);
    // if (!success)

    return lpPoint;
}

1 votes

Comment référencer le type POINT ?

2 votes

Ajouter une référence à System.Drawing

1 votes

Une solution géniale. Mais vous n'avez pas besoin de déclarer la structure POINT. Utilisez simplement l'espace de nom Win32Interop.Structs.

17voto

adrianbanks Points 36858

Curseur.Position obtiendra la position actuelle de la souris à l'écran (si vous êtes dans une Contrôle le MousePosition aura également la même valeur).

Pour définir la position de la souris, vous devrez utiliser Cursor.Position et lui donner un nouveau Point :

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

Vous pouvez le faire dans votre Main avant de créer votre formulaire.

16voto

pinouchon Points 7706

Pour répondre à votre exemple spécifique :

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

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

N'oubliez pas d'ajouter using System.Windows.Forms; et en y ajoutant la référence (clic droit sur les références > ajouter une référence > onglet .NET > Systems.Windows.Forms > ok).

12voto

James Points 766
System.Windows.Forms.Control.MousePosition

Obtient la position du curseur de la souris en coordonnées d'écran. "La propriété Position est identique à la propriété Control.MousePosition".

4 votes

Pas besoin d'être grossier. Il s'agit d'une alternative à la réponse principale. Je préfère simplement celle-ci car l'autre "Cursor.Position" ressemble à un curseur de type texte et "MousePosition" est plus évident.

3 votes

Bien sûr, et oui, j'ai pensé que cela pourrait être utile. J'aurais dit quelque chose comme ceci : "Pourriez-vous, s'il vous plaît, inclure un peu plus d'informations afin que je puisse voir en quoi cela peut différer des réponses données précédemment ?".

0 votes

@JanDvorak Si vous pensez que les phrases courtes ne sont pas utiles (en fait, elles le sont), cela ne dépend pas du fait que la question date d'un jour ou de trois ans. +1 pour l'approche alternative.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X