# MouseClickDrag

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

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

## 参数

WhichButton

  类型: 字符串

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

  Left 和 Right 分别对应主按钮和次按钮. 如果用户通过系统设置调换了按钮, 按钮的物理位置会被调换, 但效果不变.

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) , 可能无法工作.

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

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

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

## 相关

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

## 示例

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

    MouseClickDrag "left", 0, 200, 600, 400

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

    Run "mspaint.exe"
    if !WinWaitActive("ahk_class MSPaintApp",, 2)
        return
    WinMaximize
    MouseClickDrag "L", 150, 350, 150, 250
    MouseClickDrag "L", 150, 250, 200, 200
    MouseClickDrag "L", 200, 200, 250, 250
    MouseClickDrag "L", 250, 250, 150, 250
    MouseClickDrag "L", 150, 250, 250, 350
    MouseClickDrag "L", 250, 350, 250, 250
    MouseClickDrag "L", 250, 250, 150, 350
    MouseClickDrag "L", 150, 350, 250, 350

dftg