# MouseClickDrag

点击并按住指定的鼠标按钮, 接着移动鼠标到目标坐标, 然后松开按钮.

    MouseClickDrag, WhichButton, X1, Y1, X2, Y2 , Speed, Relative

### 参数

WhichButton

  要点击的按钮: Left, Right, Middle(或这些单词的首个字母). 对于第四个按钮使用 X1, 对第五个则用 X2. 例如: `MouseClickDrag, X1, ...`.

  要避免受用户通过系统控制面板对左右键功能交换的设置的影响, 请使用 Click 命令代替.

X1, Y1

  拖动的起始位置的 x/y 坐标, 可以为表达式(在开始拖动前会移动鼠标到这个坐标). 坐标相对于活动窗口, 除非曾使用 CoordMode 改变了这个设置. 如果省略, 则使用鼠标的当前位置.

X2, Y2

  拖动的目标位置的 x/y 坐标, 可以为表达式. 坐标相对于活动窗口, 除非曾使用 CoordMode 改变了这个设置.

Speed

  移动鼠标的速度, 介于 0(最快) 和 100(最慢) 之间, 可以为表达式.

  注意: 速度为 0 表示瞬时移动鼠标到目标位置.

  如果省略, 则使用默认速度(通过 SetDefaultMouseSpeed 设置, 若未设置则使用 2).

  在 SendInput/Play 模式中会忽略 Speed; 它们会瞬时移动鼠标到目标位置(不过 SetMouseDelay 有适用于 SendPlay 的模式). 要显示鼠标移动轨迹(例如使用脚本向观众进行演示时), 请使用 `SendEvent {Click 100 200}` 或 `SendMode Event`(可以和 BlockInput 联合使用).

Relative

  如果省略, 则会把 X 和 Y 坐标视为绝对值. 要更改此行为, 请指定下面的字母:

  R: 将 X1 和 Y1 坐标视为距离当前鼠标位置的偏移. 换句话说, 会把光标从当前位置往右移动 X1 像素(负值则往左) 且往下移动 Y1 像素(负值则往上). 同样地, 会把 X2 和 Y2 坐标视为距离 X1 和 Y1 坐标的偏移. 例如, 后面的例子中会首先把鼠标从起始位置往下和往右移动 5 个像素, 然后从这个位置往下和往右拖动 10 个像素: `MouseClickDrag, Left, 5, 5, 10, 10, , R`.

## 备注

此命令的发送模式由 SendMode 设置.

还可以使用其他 Send 命令进行拖动, 这样更灵活, 因为可以通过命令名指定发送的模式. 例如:

    SendEvent {Click 6 52 Down}{Click 45 52 Up}

上面这种方法的另一个好处是与 MouseClickDrag 不同, 它不受用户通过系统控制面板对左右键功能交换的设置的影响.

SendPlay 模式生成的鼠标事件可以比其他模式适应更大范围的游戏. 然而, 使用 SendPlay 进行拖动操作在 RichEdit 控件中(可能还有其他的) 例如 WordPad 和 Metapad, 可能无法工作.

某些应用程序和游戏在鼠标移动过快时可能会跟踪困难. 可以使用 SetDefaultMouseSpeed 的 speed 参数来降低鼠标的速度(仅对默认的 SendEvent 模式有效).

可以使用 BlockInput 命令防止用户对鼠标的任何物理操作扰乱由鼠标命令生成的模拟鼠标事件. 不过, 在 SendInput/Play 模式中通常不需要这个命令, 因为它们会自动延迟用户对鼠标的物理操作到发送之后.

在每次鼠标按下事件和鼠标弹起事件后都会有一个自动的延时(不包括 SendInput 模式). 此延时同样发生在拖动期间鼠标的移动之后. 使用 SetMouseDelay 可以改变延时的长度.

## 相关

CoordMode, SendMode, SetDefaultMouseSpeed, SetMouseDelay, Click, MouseClick, MouseGetPos, MouseMove, BlockInput

## 示例

点击并按住鼠标左键, 将鼠标光标移动到目标坐标, 然后松开按钮.

    MouseClickDrag, left, 0, 200, 600, 400

打开微软的画图并画一个小房子.

    Run, mspaint.exe
    WinWaitActive, ahk_class MSPaintApp,, 2
    if ErrorLevel
        return
    MouseClickDrag, L, 150, 250, 150, 150
    MouseClickDrag, L, 150, 150, 200, 100
    MouseClickDrag, L, 200, 100, 250, 150
    MouseClickDrag, L, 250, 150, 150, 150
    MouseClickDrag, L, 150, 150, 250, 250
    MouseClickDrag, L, 250, 250, 250, 150
    MouseClickDrag, L, 250, 150, 150, 250
    MouseClickDrag, L, 150, 250, 250, 250

dftg