# ClipboardAll

创建一个包含剪贴板上的所有内容的对象(如图片和格式).

    ClipSaved := ClipboardAll(Data, Size)

`ClipboardAll` 本身是一个派生自 `Buffer` 的类.

## 参数

省略这两个参数来检索剪贴板的当前内容. 否则, 指定一个或两个参数来创建包含给定二进制剪贴板数据的对象.

Data

  类型: 对象或整数

  类缓冲对象, 或为二进制数据地址的纯整数. 数据必须采用特定的格式, 因此通常源自之前对 ClipboardAll 的调用. 请参阅下面的示例 #2.

Size

  类型: 整数

  数据要使用的字节数. 当 Data 是对象时, 这是可选的.

## 返回值

类型: 对象

函数返回 ClipboardAll 对象的引用 , 它有两个属性(继承自 Buffer):

- Ptr: 对象包含的数据的地址. 此地址在释放对象之前有效.
- Size: 原始二进制数据的大小, 以字节为单位.

## 备注

内置变量 A_Clipboard 包含以纯文本形式表示的 Windows 剪贴板的当前内容.

ClipboardAll 函数最常用来保存剪贴板的内容, 以便脚本可以临时使用剪贴板进行操作. 当操作完成时, 脚本恢复原来的剪贴板内容, 如示例 #1 和示例 #2 所示.

如果 ClipboardAll 不能检索剪贴板上的一个或多个数据对象(格式), 它们将被省略, 但所有剩余的对象将被存储.

ClipWait 可用于检测剪贴板何时包含数据(可选包括非文本数据).

对象所包含的二进制数据由 4 字节格式类型, 接着 4 字节数据块大小, 而后是该格式的数据块组成. 如果剪贴板包含不止一种格式(几乎总是这样), 则重复这三项, 直到包含所有格式为止. 数据以 4 字节格式类型的 0 结束.

已知限制: 当 Microsoft Excel 的单元格被复制到剪贴板时, 使用 ClipboardAll 可能会导致 Excel 弹出 "找不到打印机" 的对话框.

## 相关

A_Clipboard, ClipWait, OnClipboardChange, #ClipboardTimeout, Buffer

## 示例

使用变量保存和恢复剪贴板上的所有内容.

    ClipSaved := ClipboardAll()   ; 把整个剪贴板保存到您选择的变量中.
    ; ... 这里临时使用剪贴板, 比如快速粘贴大量文本 ...
    A_Clipboard := ClipSaved   ; 还原剪贴板. 注意这里使用 A_Clipboard(而不是 ClipboardAll).
    ClipSaved := ""  ; 在剪贴板含有大量内容时释放内存.

使用文件保存和还原剪贴板上的所有内容.

    ; 选项 1: 删除任何现有文件, 然后使用 FileAppend.
    FileDelete "C:\Company Logo.clip"
    FileAppend ClipboardAll(), "Company Logo.clip" ; 文件扩展名无关紧要.

    ; 选项 2: 使用 FileOpen 的 overwrite 模式和 File.RawWrite.
    ClipData := ClipboardAll()
    FileOpen("Company Logo.clip", "w").RawWrite(ClipData)

要稍后将文件加载回剪贴板(或变量), 请遵循以下示例:

    ClipData := FileRead("Company Logo.clip", "RAW")  ; 在这种情况下, FileRead 返回缓冲.
    A_Clipboard := ClipboardAll(ClipData)  ; 将缓冲转换到 ClipboardAll 并赋值.

dftg