2011-11-08 4 views
58

Je veux simuler le mouvement de la souris toutes les x secondes. Pour cela, je vais utiliser une minuterie (x secondes) et quand la minuterie se déclenche, je vais faire le mouvement de la souris. Mais, comment faire pour déplacer le curseur de la souris en utilisant C#?Comment déplacer le curseur de la souris en utilisant C#?

+2

Cela ressemble à une demi-solution à un problème que vous ne nous dit pas à propos de , qui a probablement des solutions plus élégantes. –

+0

C'est tout à fait possible! Nous ne comprenons pas pourquoi mais l'économiseur d'écran est activé passé 10 minutes. Mais nous mettons 999 minutes: P –

+2

Ensuite, vous devriez chercher des solutions qui empêchent l'économiseur d'écran d'activer lorsque votre application est en cours d'exécution, plutôt que de jouer avec la souris ou les paramètres économiseur d'écran. Par exemple. P/Invoke [SetThreadExecutionState] (http://stackoverflow.com/questions/3665332/how-do-i-prevent-screen-savers-and-sleeps-during-my-program-execution/3665545#3665545). Je me suis douté que c'était un économiseur d'écran lié - les mouvements programmés de la souris ne réinitialisent pas la minuterie de l'économiseur d'écran. –

Répondre

52

Jetez un coup d'œil au Cursor.Position Property. Cela devrait vous aider à démarrer.

private void MoveCursor() 
{ 
    // Set the Current cursor, move the cursor's Position, 
    // and set its clipping rectangle to the form. 

    this.Cursor = new Cursor(Cursor.Current.Handle); 
    Cursor.Position = new Point(Cursor.Position.X - 50, Cursor.Position.Y - 50); 
    Cursor.Clip = new Rectangle(this.Location, this.Size); 
} 
+1

Merci @JamesHill, je ne me souviens pas comment faire cela et votre exemple est excellent. J'ai mon cas J'ai ajouté quelques calculs à x et y afin de rendre le temps de déplacement de la souris (pixel par seconde) – Pimenta

+2

Est-ce que cette approche est WinForms? – greenoldman

+7

Je me sens comme si je devais mentionner cela afin que quelqu'un ne tombe pas dans le problème hilarant que je viens d'avoir. 'Cursor.Clip' limitera le mouvement de votre souris à la taille spécifiée par' Location' et 'Size'. L'extrait ci-dessus permet uniquement à votre souris de se déplacer dans la zone de délimitation de l'application. – Brandon

19

First Ajouter une classe (Win32.cs)

public class Win32 
{ 
    [DllImport("User32.Dll")] 
    public static extern long SetCursorPos(int x, int y); 

    [DllImport("User32.Dll")] 
    public static extern bool ClientToScreen(IntPtr hWnd, ref POINT point); 

    [StructLayout(LayoutKind.Sequential)] 
    public struct POINT 
    { 
     public int x; 
     public int y; 
    } 
} 

Appelez ensuite de l'événement:

Win32.POINT p = new Win32.POINT(); 
p.x = Convert.ToInt16(txtMouseX.Text); 
p.y = Convert.ToInt16(txtMouseY.Text); 

Win32.ClientToScreen(this.Handle, ref p); 
Win32.SetCursorPos(p.x, p.y); 
+0

Aussi dans WinForm vous pouvez utiliser Cursor.Position = new Point (x, y); – user3290286

+0

D'où vient le type POINT? – RollRoll

+0

@ThePoet C'est une structure utilisée par le code natif. –

Questions connexes