MouseClickDrag

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

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

参数

WhichButton

类型: 字符串

如果为空或省略, 则默认为 Left(鼠标左键). 否则, 请指定 Left, Right, Middle(或这些单词的首个字母); X1(第四个按钮) 或 X2(第五个按钮). 例如: MouseClickDrag "X1", 0, 0, 10, 10.

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

X1, Y1

类型: 整数

指定拖动的起始位置的 X 和 Y 坐标(在开始拖动前会移动鼠标到这个坐标). 坐标相对于活动窗口的客户端区域, 除非曾使用 CoordMode 改变了这个设置.

[v2.0.7+]: 如果同时省略 X1 和 Y1, 则使用鼠标光标的当前位置. 由于一个 bug, X1 和 Y1 在以前的版本中是必需的.

X2, Y2

类型: 整数

拖动的目标位置的 X 和 Y 坐标. 坐标相对于活动窗口的客户端区域, 除非曾使用 CoordMode 改变了这个设置.

Speed

类型: 整数

如果省略, 则使用默认速度(由 SetDefaultMouseSpeed 设置, 否则为 2). 否则, 请指定移动鼠标的速度, 介于 0(最快) 和 100(最慢) 之间. 速度为 0 表示鼠标瞬时移动.

对于 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
MouseClickDrag "L", 150, 450, 150, 350
MouseClickDrag "L", 150, 350, 200, 300
MouseClickDrag "L", 200, 300, 250, 350
MouseClickDrag "L", 250, 350, 150, 350
MouseClickDrag "L", 150, 350, 250, 450
MouseClickDrag "L", 250, 450, 250, 350
MouseClickDrag "L", 250, 350, 150, 450
MouseClickDrag "L", 150, 450, 250, 450