首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 模擬滑鼠操作:SetCursorPos 與 mouse_event API 完整封裝指南

     編輯:關於C語言

應用場景

  • 巨集錄製/回放 (使用者操作重現)
  • 自動化測試腳本
  • 操作示範 Demo 程式
  • 無障礙輔助工具

核心 Win32 API

1. SetCursorPos - 設定游標絕對位置

[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);

參數為螢幕左上角原點的絕對座標。

2. mouse_event - 綜合滑鼠事件模擬

[DllImport("user32.dll")]
static extern void mouse_event(MouseEventFlags flags, int dx, int dy, 
    uint data, UIntPtr extraInfo);

功能涵蓋:

  • 絕對/相對位置移動
  • 左/中/右鍵按下與釋放
  • 滾輪操作
  • X 按鍵 (擴充按鍵)

MouseEventFlags 列舉定義

[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 | Absolutedx,dy 為 0-65535 正規化座標
左鍵單擊LeftDown | LeftUp依序發送按下/釋放
右鍵單擊RightDown | RightUp
滾輪向上Wheeldata > 0 向上,< 0 向下
相對移動 (10, -5)Movedx,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 文件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved