【问题标题】:In Windows, what actually is the clipboard?在 Windows 中,剪贴板到底是什么?
【发布时间】:2016-05-20 07:55:21
【问题描述】:

这听起来像是一个愚蠢的问题,但剪贴板到底是什么?

在我注意到剪贴板的使用方式比我最初想象的要复杂得多后,我的好奇心猛增。我认为剪贴板基本上可以跟踪文本字符串、图像或文件,然后只要上下文匹配,就会将任何内容粘贴到用户指定的任何位置。

但是,使用 Microsoft Word 等文字处理软件,我注意到您可以直接从网站复制和粘贴样式,并且在 Skype 等程序上,您可以复制在记事本文档中看似普通文本的引号,但实际上Skype 用户界面中的格式化笔记。

我查看了一个伪造的 Skype 报价生成器的源代码,似乎有多个剪贴板。还是剪贴板布局在键值类型映射中?

【问题讨论】:

    标签: windows clipboard


    【解决方案1】:

    有多个clipboard data formats,当您SetClipboardData 时,您指定数据的格式。您可以同时设置多种剪贴板格式,因为剪贴板已使用EmptyClipboard 明确清除,您还可以注册自己的自定义格式以在您的应用程序之间使用。

    另一方打开剪贴板,查看当前有哪些格式,选择最合适的格式,然后继续进行。

    【讨论】:

    • 我认为重要的是要指出,剪贴板不仅是一个可以存储数据(即使是多种格式)的静态位置,而且还可以告诉 Windows“在剪贴板,如果有人想看,请告诉我”。然后基本上没有任何东西存储在剪贴板中,只有这个“注释” - 只有当你粘贴它时,剪贴板所有者才会以所需的格式生成所需的数据。这也是为什么当您在剪贴板中有很多内容退出时,Word 会询问您是否要保留它(因为它必须被具体化)。
    • 这实际上是一个非常有用的优化:假设你在Word中复制或剪切了很多数据。 Word 不需要创建该数据的物理副本并将其放入剪贴板。因此,当您再次将其粘贴到 Word 中时,Word 知道这是一个“内部操作”,并且可以以内部、更优化的方式移动您的信息(例如,它可以通过在内部引用旧图像而不是复制所有像素)。仅当您将其粘贴到不知道任何这些内容的应用程序中时,才会创建所需格式的实际副本。
    • @CherryDT:是的,感谢您添加此内容。只是OP似乎专门询问了多种格式问题,尽管标题一般,所以我保持简单...... :)
    【解决方案2】:

    要添加到 @ybungalobill 答案,请阅读 Windows 开发中心 here 提供的其余信息。 CUT/COPY 操作的简短摘录是 -

    要在剪贴板上放置信息,窗口首先使用 EmptyClipboard 函数清除任何以前的剪贴板内容。此函数将 WM_DESTROYCLIPBOARD 消息发送给先前的剪贴板所有者,释放与剪贴板上的数据相关的资源,并将剪贴板所有权分配给打开剪贴板的窗口。要找出哪个窗口拥有剪贴板,请调用 GetClipboardOwner 函数。

    清空剪贴板后,窗口会将数据以尽可能多的剪贴板格式放置在剪贴板上,从最具描述性的剪贴板格式到最不具描述性的格式排序。对于每种格式,窗口调用 SetClipboardData 函数,指定格式标识符和全局内存句柄。内存句柄可以为 NULL,表示窗口根据请求呈现数据。有关详细信息,请参阅延迟渲染。

    如果您愿意,您可以跟进 API 参考中的函数定义。但 SetClipboardData 是神奇发生的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 2010-11-22
      • 2014-09-14
      相关资源
      最近更新 更多