ControlClick

发送鼠标按钮或鼠标滚轮事件到控件.

ControlClick , Control-or-Pos, WinTitle, WinText, WhichButton, ClickCount, Options, ExcludeTitle, ExcludeText

参数

Control-or-Pos

如果为空或省略, 则点击目标窗口的顶层控件(或如果窗口没有控件则点击窗口自身). 否则, 请使用以下模式之一.

模式 1(位置): 指定相对于目标窗口左上角的 X 和 Y 坐标. X 坐标必须在 Y 坐标前面, 且它们之间需要含有至少一个空格或 tab. 例如: X55 Y33. 如果在指定的坐标存在控件, 则会发送点击事件到这个坐标处. 如果没有控件, 则发送事件到目标窗口自身(根据窗口的性质, 这可能不会产生效果).

注意: 在此模式中, 会忽略 Options 参数中的 X 和 Y 字母选项.

模式 2(ClassNN 或文本): 可以指定 ClassNN(控件的类名和实例编号) 或控件的名称/文本, 它们都可以通过 Window Spy 获取. 使用名称/文本时, 匹配行为由 SetTitleMatchMode 决定.

默认情况下, 模式 2 优先于模式 1. 例如, 在一种不太可能的情况中某个控件的文本或 ClassNN 格式为 "Xnnn Ynnn", 那么此时会使用模式 2. 要覆盖此行为而无条件使用模式 1, 请在 Options 中加上单词 Pos, 例如: ControlClick, x255 y152, WinTitle,,,, Pos

要操作控件的 HWND(窗口句柄), 请将此参数留空同时在 WinTitle 参数中指定 ahk_id %ControlHwnd%(即使在 DetectHiddenWindows 设置关闭时, 这样也可以操作隐藏控件). 获取控件的 HWND 的一般方法是使用 ControlGet Hwnd, MouseGetPosDllCall().

WinTitle, WinText, ExcludeTitle, ExcludeText

如果这些都是空白或省略, 将使用上次找到的窗口. 否则, 为 WinTitle 指定窗口标题或其他条件, 来标识目标窗口, 和/或为 WinText 指定目标窗口的单个文本元素的子字符串(由包含的 Window Spy 实用程序显示).

ExcludeTitleExcludeText 可用于根据标题或文本排除一个或多个窗口. 它们的规范类似于 WinTitleWinText, 除了 ExcludeTitle 不识别除窗口标题之外的任何条件.

窗口标题和文本是区分大小写的. 默认情况下, 不检测隐藏窗口, 而检测隐藏文本元素, 除非使用 DetectHiddenWindowsDetectHiddenText 进行更改. 默认情况下, 窗口标题必须以指定的 WinTitleExcludeTitle 开头才能匹配, 除非使用 SetTitleMatchMode 进行更改.

WhichButton

如果为空或省略, 默认为 Left(鼠标左键). 否则, 指定要单击的按钮或鼠标滚轮的旋转/推入方向.

按钮: Left, Right, Middle(或这些单词的首字母); X1(第四个按钮) 或 X2(第五个按钮).

鼠标滚轮: 指定 WheelUp 或 WU 使滚轮向上转动(远离你); 指定 WheelDown 或 WD 使滚轮向下转(朝向你). [v1.0.48+]: 指定 WheelLeft(或 WL) 或 WheelRight(或 WR) 分别向左或向右转动(但这些对 Windows Vista 以前的操作系统没有影响). ClickCount 为需要转动的滚轮格数.

ClickCount

如果为空或省略, 默认为 1. 否则, 请指定单击鼠标按钮或转动鼠标滚轮的次数, 可以是表达式.

Options(选项)

如果为空或省略, 每次单击都由一个向下事件和一个向上事件组成, 并且在模式 2 生效时发生在控件的中心. 否则, 请指定一个或多个下列选项组成的系列. 例如: d x50 y25.

NA [v1.0.45+]: 也许可以提高可靠性. 请参阅后面的可靠性.

D: 按住鼠标按钮不放(即生成按下事件). 如果 D 和 U 选项都没有包含, 则会发送完整的点击事件(按下事件和弹起事件).

U: 释放鼠标按钮(即生成弹起事件). 此选项不能和 D 选项同时使用.

Pos:Options 的任意位置指定单词 Pos, 这样会无条件使用在上面 Control-or-Pos 参数中描述的 X/Y 位置模式.

Xn: 指定 n 为要点击的相对于控件左上角的 X 坐标. 如果未指定, 则在控件的水平中心点击.

Yn: 指定 n 为要点击的相对于控件左上角的 Y 坐标. 如果未指定, 则在控件的垂直中心点击.

XY 选项中使用十进制数而不是十六进制数.

错误处理

[v1.1.04+]: 此命令失败时会抛出异常. 想了解更多信息, 请参阅运行时错误.

如果遇到问题则 ErrorLevel 被置为 1, 否则为 0.

可靠性

要提高可靠性, 尤其是在 ControlClick 期间用户同时在使用鼠标, 请尝试下面的一种或两种方法也许会有所帮助:

1) 请在 ControlClick 前面加上 SetControlDelay -1. 这样可以避免在点击时按住鼠标, 减少对用户使用鼠标的干扰.

2) 在第六个参数(Options) 中指定字符串 NA, 如下所示:

SetControlDelay -1
ControlClick, Toolbar321, WinTitle,,,, NA

NA 选项可以避免激活目标窗口, 同时避免混淆它和脚本的输入, 这样可以防止鼠标实际移动产生的冲突(但通常只在目标窗口不活动时). 然而, 此方法不是对所有的窗口和控件都有效.

备注

在滚动鼠标滚轮时, 有些程序不会接受大于 1 的 ClickCount. 对于这些程序, 请使用循环来转动多个格数, 例如这个例子转动 5 格:

Loop, 5
    ControlClick, Control, WinTitle, WinText, WheelUp

SetControlDelay, Control, ControlGet, ControlGetText, ControlMove, ControlGetPos, ControlFocus, ControlSetText, ControlSend, Click

示例

点击 OK(确定) 按钮.

ControlClick, OK, Some Window Title

在坐标上进行点击. 注意 X 和 Y 之间没有逗号.

ControlClick, x55 y77, Some Window Title

在 NA 模式下, 点击相对于命名控件的坐标.

SetControlDelay -1  ; 提升可靠性并减少副作用.
ControlClick, Toolbar321, Some Window Title,,,, NA x192 y10