# MouseClickDrag

点击并按住指定的鼠标按键，移动鼠标到目标位置，释放鼠标按键。

MouseClickDrag, WhichButton, X1, Y1, X2, Y2 [, Speed, R]

#### 参数

WhichButton | 需要点击的按钮：Left/左键（默认），Right/右键，Middle/中键（或取这些单词的首字母），某些鼠标有第三个或第四个键的话，必须要 Windows2000 以上的版本才支持：使用 X1 代表第四个键，X2 代表第五个键。例如：MouseClickDrag, X1, ... 如果要自动适应用户在控制面板里面对鼠标左右键的交换，使用 Click/点击 命令 来替换。
X1, Y1 | 鼠标开始拖动位置的横坐标和纵坐标，可以使用 expressions/表达式（鼠标会在开始拖动前移动到该坐标）。坐标默认是相对于当前的窗口，除非设置了不同的 CoordMode/坐标模式 。如果省略该参数，则默认为当前鼠标位置。
X2, Y2 | 鼠标需要拖动到的目标位置的横坐标和纵坐标，可以使用 expressions/表达式。坐标默认是相对于当前的窗口，除非设置了不同的 CoordMode/坐标模式 。
Speed | 鼠标移动的速度，从 0（最快）到 100（最慢），可以是 expression/表达式 。注意：设置为 0 的时候，鼠标会立即移动到目标位置。如果省略，默认使用 SetDefaultMouseSpeed/设置鼠标默认移动速度 设置的速度，如果没有设置，则使用 2 。 Speed 参数在 SendInput/SendPlay 模式 中是无效的，在这两种模式中会直接移动鼠标到目标位置（即使 SetMouseDelay/设置鼠标延时 中有一种模式适用于 SendPlay 模式）。如果需要显示鼠标移动轨迹——比如在向观众演示的时候——可以使用 SendEvent {Click 100, 200) 或者 SendMode Event/发送模式事件 。（也可同时设置 BlockInput/阻止输入）。
R | 如果这个参数使用了字母 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}

使用 Send/发送 命令的另外一个好处是，和 MouseClickDrag 不同，它可以自动适应用户在控制面板中对鼠标左右键的交换。

在某些游戏中，SendPlay 模式 比其它的模式具有更好的兼容性。但是，SendPlay 模式下的鼠标拖动，在 RichEdit/富文本 控件中（可能还有其它的），例如 WordPad 和 Metapad ，可能不能正常工作。

在某些程序或者游戏中，如果鼠标移动速度过快，它们可能无法识别鼠标的移动，这时候可以使用 speed 参数或 SetDefaultMouseSpeed/设置鼠标默认移动速度 来减慢鼠标的移动速度（不过只能在 SendEvnet 模式 中有效）。

BlockInput/阻止输入 命令可以防止用户在脚本运行过程中因移动或点击鼠标而造成脚本错误。不过在 SendInput 和 SendPlay 模式中一般不需要使用这个命令，因为它们本身就自动推迟了用户对鼠标的操作。

在每次鼠标按下和鼠标释放之后都会有一个自动的延时（除了 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