web-dev-qa-db-fra.com

Comment puis-je simuler un clic de souris à une certaine position sur l'écran?

Ce que je veux faire, c'est manipuler la souris. Ce sera une simple macro à mes propres fins. Il déplacera donc ma souris à une certaine position sur l'écran et cliquera comme je clique avec un certain intervalle.

41
MonsterMMORPG

Voici un code qui utilise des fonctions non managées pour simuler les clics de souris:

//This is a replacement for Cursor.Position in WinForms
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool SetCursorPos(int x, int y);

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

public const int MOUSEEVENTF_LEFTDOWN = 0x02;
public const int MOUSEEVENTF_LEFTUP = 0x04;

//This simulates a left mouse click
public static void LeftMouseClick(int xpos, int ypos)
{
    SetCursorPos(xpos, ypos);
    mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
    mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0);
}

Pour maintenir la souris enfoncée pendant une durée spécifique, vous pouvez Sleep() le thread qui exécute cette fonction, par exemple:

mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
System.Threading.Thread.Sleep(1000);
mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0);

Le code ci-dessus maintiendra la souris enfoncée pendant 1 seconde à moins que l'utilisateur n'appuie sur le bouton de la souris. De plus, assurez-vous de ne pas exécuter ce code sur le thread d'interface utilisateur principal car il le ferait se bloquer.

52
Nasreddine

Vous pouvez vous déplacer par position XY. Exemple ci-dessous:

windows.Forms.Cursor.Position = New System.Drawing.Point(Button1.Location.X + Me.Location.X + 50, Button1.Location.Y + Me.Location.Y + 30)

Pour cliquer, vous pouvez utiliser le code ci-dessous:

using System.Runtime.InteropServices;

private const UInt32 MOUSEEVENTF_LEFTDOWN = 0x0002;
private const UInt32 MOUSEEVENTF_LEFTUP = 0x0004;
[DllImport("user32.dll")]
    private static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData,             uint dwExtraInf);
private void btnSet_Click(object sender, EventArgs e)
    {
        int x = Convert.ToInt16(txtX.Text);//set x position 
        int y = Convert.ToInt16(txtY.Text);//set y position 
        Cursor.Position = new Point(x, y);
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//make left button down
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//make left button up
    }

Crédit à JOHNYKUTTY

7
Pkplonker