//using System; //using System.Runtime.InteropServices; //using System.Windows.Forms; private const int INPUT_MOUSE = 0; private const uint MOUSEEVENTF_MOVE = 0x0001U; private const uint MOUSEEVENTF_LEFTDOWN = 0x0002U; private const uint MOUSEEVENTF_LEFTUP = 0x0004U; private const uint MOUSEEVENTF_RIGHTDOWN = 0x0008U; private const uint MOUSEEVENTF_RIGHTUP = 0x0010U; private const uint MOUSEEVENTF_MIDDLEDOWN = 0x0020U; private const uint MOUSEEVENTF_MIDDLEUP = 0x0040U; private const uint MOUSEEVENTF_XDOWN = 0x0080U; private const uint MOUSEEVENTF_XUP = 0x0100U; private const uint MOUSEEVENTF_WHEEL = 0x0800U; private const uint MOUSEEVENTF_HWHEEL = 0x01000U; private const uint MOUSEEVENTF_ABSOLUTE = 0x8000U; private const int XBUTTON1 = 0x0001; private const int XBUTTON2 = 0x0002; private const int WHEEL_DELTA = 120; [StructLayout(LayoutKind.Sequential)] private struct MOUSEINPUT { public int dx; public int dy; public int mouseData; public uint dwFlags; public uint time; public IntPtr dwExtraInfo; }; [StructLayout(LayoutKind.Explicit)] private struct INPUT { [FieldOffset(0)] public uint type; [FieldOffset(4)] public MOUSEINPUT mi; }; [DllImport("user32.dll")] private static extern uint SendInput(uint nInputs, ref INPUT pInputs, int cbSize); public static uint MouseEvent(int dx, int dy, int mouseData, uint dwFlags, uint time, IntPtr dwExtraInfo) { INPUT mInput = new INPUT(); mInput.type = INPUT_MOUSE; mInput.mi = new MOUSEINPUT(); mInput.mi.dx = dx; mInput.mi.dy = dy; mInput.mi.mouseData = mouseData; mInput.mi.dwFlags = dwFlags; mInput.mi.time = time; mInput.mi.dwExtraInfo = dwExtraInfo; return SendInput(1U, ref mInput, Marshal.SizeOf(mInput)); } public static uint MouseMove(int dx, int dy) { return MouseEvent(dx * 65535 / Screen.PrimaryScreen.Bounds.Width, dy * 65535 / Screen.PrimaryScreen.Bounds.Height, 0, MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 0U, IntPtr.Zero); } public static uint MouseButtonDown(MouseButtons Button) { switch (Button) { case MouseButtons.Left: return MouseEvent(0, 0, 0, MOUSEEVENTF_LEFTDOWN, 0U, IntPtr.Zero); case MouseButtons.Middle: return MouseEvent(0, 0, 0, MOUSEEVENTF_MIDDLEDOWN, 0U, IntPtr.Zero); case MouseButtons.Right: return MouseEvent(0, 0, 0, MOUSEEVENTF_RIGHTDOWN, 0U, IntPtr.Zero); case MouseButtons.XButton1: return MouseEvent(0, 0, XBUTTON1, MOUSEEVENTF_XDOWN, 0U, IntPtr.Zero); case MouseButtons.XButton2: return MouseEvent(0, 0, XBUTTON2, MOUSEEVENTF_XDOWN, 0U, IntPtr.Zero); default: return 0; } } public static uint MouseButtonDown(MouseButtons Button, int dx, int dy) { return MouseMove(dx, dy) + MouseButtonDown(Button); } public static uint MouseButtonUp(MouseButtons Button) { switch (Button) { case MouseButtons.Left: return MouseEvent(0, 0, 0, MOUSEEVENTF_LEFTUP, 0U, IntPtr.Zero); case MouseButtons.Middle: return MouseEvent(0, 0, 0, MOUSEEVENTF_MIDDLEUP, 0U, IntPtr.Zero); case MouseButtons.Right: return MouseEvent(0, 0, 0, MOUSEEVENTF_RIGHTUP, 0U, IntPtr.Zero); case MouseButtons.XButton1: return MouseEvent(0, 0, XBUTTON1, MOUSEEVENTF_XUP, 0U, IntPtr.Zero); case MouseButtons.XButton2: return MouseEvent(0, 0, XBUTTON2, MOUSEEVENTF_XUP, 0U, IntPtr.Zero); default: return 0; } } public static uint MouseButtonUp(MouseButtons Button, int dx, int dy) { return MouseMove(dx, dy) + MouseButtonUp(Button); } public static uint MouseButtonClick(MouseButtons Button) { return MouseButtonDown(Button) + MouseButtonUp(Button); } public static uint MouseButtonClick(MouseButtons Button, int dx, int dy) { return MouseMove(dx, dy) + MouseButtonDown(Button) + MouseButtonUp(Button); } public static uint MouseWheel(int Count) { return MouseEvent(0, 0, (int)(WHEEL_DELTA * Count), MOUSEEVENTF_WHEEL, 0U, IntPtr.Zero); } public static uint MouseHWheel(int Count) { return MouseEvent(0, 0, (int)(WHEEL_DELTA * Count), MOUSEEVENTF_HWHEEL, 0U, IntPtr.Zero); }