OnClipboardChange

AutoHotKey

OnClipboardChange

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

内置变量 A_EventInfo 包含:
0 剪贴板为空;
1 可以用文本表示的内容 (包括从资源管理器窗口 复制文件 );
2 完全是非文本的内容, 如图片.

下例是一个活动的脚本. 脚本运行时会用简短的ToolTip显示每次剪贴板的更改.

#Persistent
return

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

OnClipboardChange() [v1.1.20+]

注册一个每当剪贴板内容发生改变时都会运行的 函数函数对象 .

OnClipboardChange(Func [, AddRemove])

参数

Func

要调用的 函数 或 函数对象 名称. 函数的参数和返回值 如下 所述.

AddRemove

下列数值之一:
1 (默认): 在先前任意的注册函数之后调用该函数.
-1: 在先前任意的注册函数之前调用该函数.
0: 不调用该函数.

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

Func

FunctionName(Type)
Type

下列数值之一:
0 剪贴板为空;
1 可以用文本表示的内容 (包括从资源管理器窗口 复制文件 );
2 完全是非文本的内容, 如图片.

返回值

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

示例

此例等同于 上面的例子, 不同的是此函数不会在脚本开始时就被调用而仅当剪贴板的内容发生改变时.

#Persistent
OnClipboardChange("ClipChanged")
return

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

备注

在 OnClipboardChange 标签或函数正在运行时如果剪贴板内容改变, 这时的剪贴板通知事件会丢失. 如果需要这些事件的话, 在标签的首行指定 Critical .而当OnClipboardChange线程在运行时, 这样做会缓冲/延迟其他 线程 (像热键的按击) 的运行.

如果是脚本本身改变了剪贴板内容, 脚本中的OnClipboardChange标签或函数通常不会马上执行; 也就是说紧接在改变剪贴板命令后面的命令就像提前运行了一样. 在改变剪贴板内容后使用一个像 Sleep 20 这样的延时可以让OnClipboardChange标签或函数立即执行.

相关

Clipboard, OnExit, OnMessage(), RegisterCallback()