[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);
參數為螢幕左上角原點的絕對座標。
[DllImport("user32.dll")]
static extern void mouse_event(MouseEventFlags flags, int dx, int dy,
uint data, UIntPtr extraInfo);
功能涵蓋:
[Flags]
enum MouseEventFlags : uint
{
Move = 0x0001,
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
XDown = 0x0080,
XUp = 0x0100,
Wheel = 0x0800,
VirtualDesk = 0x4000,
Absolute = 0x8000
}
| 操作 | Flags 組合 | 說明 |
|---|---|---|
| 移動到絕對座標 (100,200) | Move | Absolute | dx,dy 為 0-65535 正規化座標 |
| 左鍵單擊 | LeftDown | LeftUp | 依序發送按下/釋放 |
| 右鍵單擊 | RightDown | RightUp | |
| 滾輪向上 | Wheel | data > 0 向上,< 0 向下 |
| 相對移動 (10, -5) | Move | dx,dy 為相對位移 |
public static class MouseSimulator
{
[DllImport("user32.dll")] static extern bool SetCursorPos(int x, int y);
[DllImport("user32.dll")] static extern void mouse_event(uint flags, int dx, int dy, uint data, UIntPtr extraInfo);
public static void MoveTo(int x, int y) => SetCursorPos(x, y);
public static void LeftClick()
{
mouse_event(0x0002 | 0x0004, 0, 0, 0, UIntPtr.Zero);
}
public static void RightClick()
{
mouse_event(0x0008 | 0x0010, 0, 0, 0, UIntPtr.Zero);
}
public static void Scroll(int delta)
{
mouse_event(0x0800, 0, 0, (uint)delta, UIntPtr.Zero);
}
}
詳細參數說明請參閱 MSDN Library 或 Windows Platform SDK 文件。