Come posso simulare un clic del mouse in una determinata posizione sullo schermo?

Quello che voglio fare è manipolare il mouse. Sarà una macro semplice per i miei scopi. Quindi sposta il mouse in una determinata posizione sullo schermo e fa clic come se stessi facendo clic con un certo intervallo.

Ecco un codice che utilizza le funzioni non gestite per simulare i clic del mouse:

//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); } 

Per mantenere premuto il mouse per una durata specifica puoi Sleep() il thread che sta eseguendo questa funzione, ad esempio:

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

Il codice precedente manterrà premuto il mouse per 1 secondo a meno che l’utente non preme il pulsante del mouse. Inoltre, assicurati di non eseguire questo codice sul thread dell’interfaccia utente principale, in quanto causerà il blocco .

Puoi muoverti per posizione XY. Esempio di seguito:

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

Per fare clic, puoi utilizzare il seguente codice:

 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 } 

Ringraziamento a JOHNYKUTTY