What I want to do is to manipulate the mouse. It will be a simple macro for my own purposes. So it will move my mouse to certain position on the screen and click like I am clicking with certain interval.
Asked
Active
Viewed 1.1e+01k times
59
-
1Would [this](http://stackoverflow.com/questions/8242409/simulate-mouse-clicks-at-a-certain-position-on-inactive-window-in-c-sharp/8242484#8242484) be what you need ? Also, as someone suggested in the comments, you may wanna use UIAutomation. – Nasreddine Nov 25 '11 at 17:59
2 Answers
80
Here's a code that is using unmanaged functions to simulate mouse clicks :
//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);
}
To keep the mouse pressed for a specific duration you can Sleep()
the thread that is executing this function, for example :
mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
System.Threading.Thread.Sleep(1000);
mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0);
The above code will keep the mouse pressed for 1 second unless the user presses the releases the mouse button. Also, make sure to not execute this code on the main UI thread as it will cause it to hang.

Nasreddine
- 36,610
- 17
- 75
- 94
-
1
-
2This code works fine to bring the pointer to the desired coordinates on the screen but for some reason the click does not work for me. Any idea why? – john Sep 26 '14 at 05:39
-
Here you can have the codes for other mouse buttons : https://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx – Li3ro Apr 14 '16 at 10:25
9
You can move by XY position. Example below:
windows.Forms.Cursor.Position = New System.Drawing.Point(Button1.Location.X + Me.Location.X + 50, Button1.Location.Y + Me.Location.Y + 30)
To click, you can use the below code:
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
}
Credit to JOHNYKUTTY

Nasreddine
- 36,610
- 17
- 75
- 94

StuartHeath
- 103
- 2
-
2
-
1does not work : windows.Forms.Cursor.Position = New System.Drawing.Point(Button1.Location.X + Me.Location.X + 50, Button1.Location.Y + Me.Location.Y + 30) . also i tried this at forms not mention to will not work at wpf – Furkan Gözükara Nov 25 '11 at 18:02