[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);
參數 X, Y 為螢幕左上角為原點的絕對座標。
[DllImport("user32.dll")]
static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
功能更強:支援相對/絕對座標、左/中/右鍵按下釋放、滾輪、X 按鈕等。
[Flags]
enum MouseEventFlag : uint
{
Move = 0x0001, // 移動
LeftDown = 0x0002, // 左鍵按下
LeftUp = 0x0004, // 左鍵釋放
RightDown = 0x0008, // 右鍵按下
RightUp = 0x0010, // 右鍵釋放
MiddleDown = 0x0020, // 中鍵按下
MiddleUp = 0x0040, // 中鍵釋放
XDown = 0x0080, // X1 按下
XUp = 0x0100, // X1 釋放
Wheel = 0x0800, // 滾輪
VirtualDesk = 0x4000, // 虛擬桌面
Absolute = 0x8000 // 絕對座標
}
// 絕對座標點擊
mouse_event(MouseEventFlag.Absolute | MouseEventFlag.LeftDown | MouseEventFlag.LeftUp,
x, y, 0, UIntPtr.Zero);
// 相對當前位置移動 100, 50
mouse_event(MouseEventFlag.Move, 100, 50, 0, UIntPtr.Zero);
// 向前滾動 120 单位
mouse_event(MouseEventFlag.Wheel, 0, 0, 120, UIntPtr.Zero);
public static class MouseSimulator
{
[DllImport("user32.dll")] private static extern bool SetCursorPos(int x, int y);
[DllImport("user32.dll")] private static extern void mouse_event(uint flags, int dx, int dy, uint data, UIntPtr extraInfo);
private const uint MOUSEEVENTF_ABSOLUTE = 0x8000;
private const uint MOUSEEVENTF_LEFTDOWN = 0x0002;
private const uint MOUSEEVENTF_LEFTUP = 0x0004;
private const uint MOUSEEVENTF_RIGHTDOWN = 0x0008;
private const uint MOUSEEVENTF_RIGHTUP = 0x0010;
private const uint MOUSEEVENTF_MOVE = 0x0001;
private const uint MOUSEEVENTF_WHEEL = 0x0800;
public static void MoveTo(int x, int y) => SetCursorPos(x, y);
public static void LeftClick(int x, int y)
{
SetCursorPos(x, y);
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, x, y, 0, UIntPtr.Zero);
}
public static void RightClick(int x, int y)
{
SetCursorPos(x, y);
mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, x, y, 0, UIntPtr.Zero);
}
public static void Scroll(int delta) => mouse_event(MOUSEEVENTF_WHEEL, 0, 0, (uint)delta, UIntPtr.Zero);
}
Thread.Sleep(10)),模擬真實人類操作