Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I simulate a mouse click at a certain position on the screen?

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.

like image 811
MonsterMMORPG Avatar asked Nov 25 '11 17:11

MonsterMMORPG


People also ask

How do you simulate a mouse on a touch screen?

What I need is, very simply, a true left mouse click and hold simulation by touch screen. I found I can have this if I touch the screen, hold and slightly move my finger around which can hold as long as my finger keeps moving around. If I keep my finger still on the same position, it will time out in 10 seconds.

How do you click a mouse?

Clicking is the most common function of the mouse. To click, lightly press and release the left mouse button with your index finger. Be careful not to move the mouse while you are clicking. The trick is to keep a relaxed hold on the mouse while you press the button.


2 Answers

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.

like image 91
Nasreddine Avatar answered Sep 22 '22 23:09

Nasreddine


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

like image 21
StuartHeath Avatar answered Sep 22 '22 23:09

StuartHeath