ControlClick

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

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

参数

ControlID-or-Pos

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

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

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

模式 2(控件标识符): 指定控件的 ClassNN 或文本, 或参数置空并指定 WinTitle 参数为 ahk_id %ControlHwnd% 以对控件的 HWND 进行操作. 有关详情, 请参阅控件标识符.

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

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, 这样会无条件使用在上面 ControlID-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 选项可以避免激活目标窗口, 同时避免混淆它和脚本的输入, 这样可以防止鼠标实际移动产生的冲突(但通常只在目标窗口不活动时). 然而, 此方法不是对所有的窗口和控件都有效.

备注

此命令适用于非图形用户界面窗口中的控件, 即那些不是通过 Gui 命令创建的窗口. 它与常见的或预定义的微软控件配合使用效果最佳; 有些应用程序使用自定义或修改后的控件, 在这种情况下, 该命令可能无法按预期运行. 对于 GUI 控件, 通常更方便的做法是使用 GuiControl(假设存在相应的对应项) 或直接执行其 g-标签.

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

Loop, 5
    ControlClick, ControlID, WinTitle, WinText, WheelUp

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

示例

点击 OK(确定) 按钮在 Gui 或 非界面窗口.

ControlClick, OK, Some Window Title

在 Gui 或 非界面窗口的指定坐标上进行点击. 注意 X 和 Y 之间没有逗号.

ControlClick, x55 y77, Some Window Title

相对于点击图形用户界面(GUI)或非图形用户界面窗口中的某个控件, 在指定坐标点击操作会更可靠.

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