using System.Runtime.InteropServices;
using System.Windows.Forms;
public static void Main()
Console.WriteLine("Hello World");
private void button1_Click(object sender, EventArgs e)
Win32.POINT p = new Win32.POINT();
Timer _timer = new Timer();
_timer.Tick += _timer_Tick;
private void _timer_Tick(object sender, EventArgs e)
_point = Win32.GetCursorPosition();
MouseOperations.MouseEvent(MouseOperations.MouseEventFlags.RightDown);
MouseOperations.MouseEvent(MouseOperations.MouseEventFlags.RightUp);
[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);
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
private const int MOUSEEVENTF_RIGHTUP = 0x10;
static public void DoMouseClick(Point point_)
uint X = (uint)Cursor.Position.X;
uint Y = (uint)Cursor.Position.Y;
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, (uint)point_.X, (uint)point_.Y, 0, 0);
[DllImport("user32.dll")]
public static extern bool GetCursorPos(out POINT lpPoint);
[StructLayout(LayoutKind.Sequential)]
public static implicit operator Point(POINT point)
return new Point(point.x, point.y);
public static Point GetCursorPosition()
GetCursorPos(out lpPoint);
public class ClickOnPointTool
[DllImport("user32.dll")]
static extern bool ClientToScreen(IntPtr hWnd, ref Point lpPoint);
[DllImport("user32.dll")]
internal static extern uint SendInput(uint nInputs, [MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs, int cbSize);
#pragma warning disable 649
public MOUSEKEYBDHARDWAREINPUT Data;
[StructLayout(LayoutKind.Explicit)]
internal struct MOUSEKEYBDHARDWAREINPUT
internal struct MOUSEINPUT
#pragma warning restore 649
public static void ClickOnPoint(IntPtr wndHandle, Point clientPoint)
var oldPos = Cursor.Position;
ClientToScreen(wndHandle, ref clientPoint);
Cursor.Position = new Point(clientPoint.X, clientPoint.Y);
var inputMouseDown = new INPUT();
inputMouseDown.Data.Mouse.Flags = 0x0002;
var inputMouseUp = new INPUT();
inputMouseUp.Data.Mouse.Flags = 0x0004;
var inputs = new INPUT[] { inputMouseDown, inputMouseUp };
SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(INPUT)));
Cursor.Position = oldPos;
public class MouseOperations
public enum MouseEventFlags
[DllImport("user32.dll", EntryPoint = "SetCursorPos")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetCursorPos(int X, int Y);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetCursorPos(out MousePoint lpMousePoint);
[DllImport("user32.dll")]
private static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
public static void SetCursorPosition(int X, int Y)
public static void SetCursorPosition(MousePoint point)
SetCursorPos(point.X, point.Y);
public static MousePoint GetCursorPosition()
MousePoint currentMousePoint;
var gotPoint = GetCursorPos(out currentMousePoint);
if (!gotPoint) { currentMousePoint = new MousePoint(0, 0); }
return currentMousePoint;
public static void MouseEvent(MouseEventFlags value)
MousePoint position = GetCursorPosition();
[StructLayout(LayoutKind.Sequential)]
public MousePoint(int x, int y)