OnClipboardChange

OnClipboardChange 可以用作函数命令, 但建议在新脚本中使用前者. 作为一个函数, 它注册一个函数, 以便在剪贴板的内容更改时自动调用该函数. 作为一个标签, 它在剪贴板的内容发生变化时自动启动.

OnClipboardChange 函数 [v1.1.20+]

注册一个每当剪贴板内容发生改变时都会自动调用的函数.

OnClipboardChange(Callback , AddRemove)

参数

Callback

要调用的函数或函数对象的名称. 若要传递原义的函数名称, 将其括在双引号中.

回调函数接受一个参数, 可以定义如下:

MyCallback(DataType) { ...

虽然你给参数的名称并不重要, 但是下面的数字之一会赋值给它:

如果不需要相应的信息, 可以省略回调的参数.

如果这是最近的或仅有的回调, 其返回值会被忽略. 否则, 此回调会返回一个非零整数来阻止随后的回调被调用.

AddRemove

如果省略, 则默认为 1. 否则, 请指定以下数字之一:

如果存在 OnClipboardChange 标签, 它总是会被率先调用.

OnClipboardChange 标签

过时的: 不推荐在新脚本中使用 OnClipboardChange 标签. 请使用上面描述的 OnClipboardChange 函数代替.

当任何程序(甚至脚本本身) 改变了剪贴板内容时一个以 OnClipboardChange 命名的标签(如果存在) 会自动执行. 这个标签在脚本启动时也会执行一次.

内置变量 A_EventInfo 包含以下数值之一:

备注

在回调或标签正在运行时, 如果剪贴板内容改变, 这时的剪贴板通知事件会丢失. 如果不希望这样, 请使用 Critical. 不过, 这样做也会缓冲/延迟在 OnClipboardChange 线程运行期间产生的其他线程的运行(例如热键的按击).

如果是脚本本身改变了剪贴板内容, 回调或标签通常不会立即执行; 也就是说, 紧接在改变剪贴板语句后面的语句就像提前运行了一样. 要强制立即执行这个回调或标签, 请在改变剪贴板内容后使用短暂的延迟, 例如 Sleep 20.

Clipboard, OnExit, OnMessage(), RegisterCallback()

示例

函数 vs. 标签.

尽管语法不同, 但这两个例子都有相同的效果; 即, 用简短的 ToolTip 显示每次剪贴板的更改. 注意: 与标签不同, 回调不会在脚本第一次启动时运行一次, 而只在剪贴板的内容发生更改时运行一次.

#Persistent
OnClipboardChange("ClipChanged")
return

ClipChanged(DataType) {
    ToolTip Clipboard data type: %DataType%
    Sleep 1000
    ToolTip  ; 关闭提示.
}
#Persistent
return

OnClipboardChange:
ToolTip Clipboard data type: %A_EventInfo%
Sleep 1000
ToolTip  ; 关闭提示.
return

与上面相同, 但使用函数对象.

#Persistent
OnClipboardChange(ClipChanged)
return

class ClipChanged {
    Call(DataType) {
        ToolTip Clipboard data type: %DataType%
        Sleep 1000
        ToolTip  ; 关闭提示.
    }
}