.NET Framework 本身不提供直接控制滑鼠游標位置或模擬點擊的 API,但可透過 P/Invoke 呼叫 Windows user32.dll 實現。
using System;
using System.Runtime.InteropServices;
public static class MouseSimulator
{
// 設定游標絕對座標 (螢幕左上角為 0,0)
[DllImport("user32.dll")]
public static extern bool SetCursorPos(int X, int Y);
// 模擬滑鼠事件 (移動、點擊、滾輪等)
[DllImport("user32.dll")]
public static extern void mouse_event(
MouseEventFlags flags, int dx, int dy, uint data, UIntPtr extraInfo);
// 事件旗標列舉
[Flags]
public 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 // dx/dy 為絕對座標 (0~65535 對應螢幕寬高)
}
}
// 絕對座標移動
MouseSimulator.SetCursorPos(500, 300);
MouseSimulator.mouse_event(
MouseSimulator.MouseEventFlags.LeftDown | MouseSimulator.MouseEventFlags.LeftUp,
0, 0, 0, UIntPtr.Zero);
MouseSimulator.mouse_event(
MouseSimulator.MouseEventFlags.RightDown | MouseSimulator.MouseEventFlags.RightUp,
0, 0, 0, UIntPtr.Zero);
// 向上滾動 (data 為 120 的倍數)
MouseSimulator.mouse_event(
MouseSimulator.MouseEventFlags.Wheel, 0, 0, 120, UIntPtr.Zero);
// 向下滾動
MouseSimulator.mouse_event(
MouseSimulator.MouseEventFlags.Wheel, 0, 0, (uint)(-120), UIntPtr.Zero);
// 向右移動 100 像素,向下移動 50 像素
MouseSimulator.mouse_event(
MouseSimulator.MouseEventFlags.Move, 100, 50, 0, UIntPtr.Zero);
// dx, dy 範圍 0~65535 對應螢幕解析度
MouseSimulator.mouse_event(
MouseSimulator.MouseEventFlags.Move | MouseSimulator.MouseEventFlags.Absolute,
32767, 32767, 0, UIntPtr.Zero); // 螢幕中心
System.Runtime.InteropServices詳細參數說明請參閱 MSDN SetCursorPos 與 mouse_event 文件。