Int*_*Sys 102 memory ctrl paste
我总是想知道引擎盖下发生的(操作系统)时,我的图像(选择它并使用复制Ctrl+ C)到Word文件(粘贴Ctrl+ V),例如。
use*_*686 167
在Windows 中,剪贴板 API 和存储缓冲区由操作系统在内核级别提供。(剪贴板属于“窗口站”内核对象。)
Ctrl+C告诉程序使用 Win32 API 函数存储“复制”的数据SetClipboardData(),这也对应NtUserSetClipboardData()于 Native API。
通常,复制的数据会立即存储在操作系统管理的剪贴板缓冲区中,不再依赖于源程序。该程序可以提供多种不同的格式——例如,从 MS Word 复制的文本可以同时采用 HTML、RTF 和纯文本格式。
(但是,程序可能会存储“空”数据并推迟转换,直到使用 请求粘贴WM_RENDERFORMAT。在这种情况下,程序关闭时数据会丢失。我不确定这种方法有多普遍。)
Ctrl+V告诉程序选择所需的格式并使用GetClipboardData(). 某些程序,例如写字板或画图,具有“粘贴为”功能,可让您选择首选格式(例如,如果您复制了 HTML 但不想格式化)。
另请参阅“NT 调试:剪贴板的工作原理”博客文章。
在Linux中,有没有全系统的剪贴板,而是由提供任何图形您正在使用环境(即,X11,韦兰无):
在 X11(不一定限于 Linux)中,剪贴板传输被推迟。也就是说,存储由“源”程序提供。交换是根据 ICCCM 协议通过 X11 消息完成的(因此剪贴板与 X 服务器隔离):
Ctrl+C告诉源程序将“复制”的数据保留在它自己的内存中,并声明名为“CLIPBOARD”的 X11选择。这是使用 完成的XSetSelectionOwner(),所有权由 X 服务器 (Xorg) 跟踪。
如果您之前复制了某些内容,则会通知之前的选择所有者并丢弃现在不需要的数据。
如果关闭程序,复制的数据将丢失。(剪贴板管理器可用于通过查看和复制当前选择来避免这种情况。)
Ctrl+V告诉目标程序使用 查找“剪贴板”选择的当前所有者XGetSelectionOwner(),然后使用直接询问它的首选类型XConvertSelection()。然后源程序通过另一个 X11 消息返回数据,按需转换为请求的类型。(还有一种特殊类型,它返回可能类型的列表。)
有关实际示例,请参阅此链接。
(注意:当您通过选择文本并使用中键单击粘贴来“复制”文本时,机制是相同的,但使用的是“主要”选择。这就是术语“X11 选择”的来源。)
在 Wayland - 我实际上并不了解它是如何工作的,我所拥有的只是协议文档:
https://wayland.freedesktop.org/docs/html/ch04.html#sect-Protocol-data-sharing
https://wayland.freedesktop.org/docs/html/apa.html#protocol-spec-wl_data_device
有关命令行工具,请参阅https://github.com/bugaevc/wl-clipboard。
传统的文本编辑器(Vim、emacs、nano)通常有自己的内部剪贴板(又名寄存器/killrings)。它们可能也可能不与 X11 剪贴板集成。
在macOS 中,似乎使用了一种称为“粘贴板服务器”的东西(我认为这意味着程序通过 Mach API 与其通信)。除此之外,它的行为类似于 Windows 剪贴板并存储当前复制的数据本身。
https://developer.apple.com/documentation/appkit/nspasteboard
有一个示例应用程序:https : //developer.apple.com/library/archive/samplecode/ClipboardViewer/Introduction/Intro.html
我对图像更感兴趣,它们怎么能这么容易被复制
图像只是二进制数据块,如文本或音频。剪贴板通常会以操作系统通用的格式保存图像,例如Windows 上的BMP,Linux 上的image/png。
在Linux 上,X11 剪贴板协议实际上允许一个 X 客户端向其他客户端提供不同的选择“编码”,并且接收 X 客户端可以选择编码,因此发送 X 客户端可以将选择转换为任何格式客户了解。至少在理论上;不确定像 GTK 或 Qt 这样的现代工具包库是否确实提供了很多选择。
| 归档时间: |
|
| 查看次数: |
14045 次 |
| 最近记录: |