# ControlClick

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

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

## 参数

Control-or-Pos

  类型: 字符串, 整数或对象

  如果未设置或省略, 则目标窗口本身将被点击. 否则, 使用以下模式之一.

  模式 1(位置): 指定相对于目标窗口客户端区域左上角的 X 和 Y 坐标. X 坐标必须在 Y 坐标之前, 并且它们之间必须至少有一个空格或制表符. 例如: `X55 Y33`. 如果在指定的坐标上有一个控件, 它将在这些确切的坐标上发送点击事件. 如果没有控件, 目标窗口本身将被发送事件(根据窗口的性质, 可能没有效果).

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

  模式 2(控件): 指定控件的 ClassNN, 文本或 HWND, 或一个具有 `Hwnd` 属性的对象. 有关详情, 请参阅控件的参数.

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

WinTitle, WinText, ExcludeTitle, ExcludeText

  类型: 字符串, 整数或对象

  如果这些都未设置或省略, 将使用上次找到的窗口. 否则, 为 WinTitle 指定窗口标题或其他条件, 来标识目标窗口, 和/或为 WinText 指定目标窗口的单个文本元素的子字符串(由包含的 Window Spy 实用程序显示). 如果 DetectHiddenText 已经打开, 则检测隐藏文本元素. 标题或文本包含 ExcludeTitle 或 ExcludeText 的窗口将不被考虑.

WhichButton

  类型: 字符串

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

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

  鼠标滚轮: 指定 WheelUp 或 WU 使滚轮向上转动(远离你); 指定 WheelDown(或 WD) 使滚轮向下转动(朝向你). 指定 WheelLeft(或 WL) 或 WheelRight(或 WR) 分别向左或向右滚动滚轮. ClickCount 是转动滚轮的格数.

ClickCount

  类型: 整数

  如果未设置或省略, 默认为 1. 否则, 请指定单击鼠标按钮或转动鼠标滚轮的次数.

Options

  类型: 字符串

  如果未设置或省略, 则每次点击由 "按下" 事件后接着 "弹起" 事件组成, 并且在模式 2 生效时发生在控件的中心. 否则, 请指定一个或多个下列选项组成的系列. 例如: `"d x50 y25"`

  NA: 也许可以提高可靠性. 请参阅后面的可靠性.

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

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

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

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

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

  X 和 Y 选项中使用十进制(不是十六进制数) 数字.

## 错误处理

在以下情况下会抛出异常:

- TargetError: 找不到目标窗口.
- TargetError: 找不到目标控件, 且 Control-or-Pos 没有指定有效的位置.
- OSError(非常罕见): X 或 Y 位置被省略, 且无法确定控件的位置.
- ValueError 或 TypeError: 检测到无效参数.

## 可靠性

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

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

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

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

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

## 备注

并非所有的应用程序都遵守 ClickCount 大于 1 的方式来转动鼠标滚轮. 对于这些应用, 使用 Loop 来转动多个格数, 例如这个例子转动 5 格:

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

窗口标题和文本是区分大小写的. 除非 DetectHiddenWindows 被打开, 否则不会检测隐藏窗口.

## 相关

SetControlDelay, 控件函数, 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"

dftg