在Windows中,实际上是剪贴板?

时间:2016-05-20 07:55:21

标签: windows clipboard

这可能听起来像一个愚蠢的问题,但实际上是剪贴板?我注意到剪贴板的使用方式比我原先想象的要复杂得多,我的好奇心飙升了。我认为剪贴板基本上跟踪了一串文本,一个图像或一个文件,然后如果上下文匹配,只需将它粘贴到用户指定的任何地方。

然而,对于像MS Word这样的文字处理软件,我注意到你可以直接从网站上复制和粘贴样式,而在skype这样的程序上,你可以在记事本文件中复制看似普通文字的引号,但实际上是格式化的笔记在skype的ui。

我看了一个虚假的Skype报价生成器的源代码,看起来有多个剪贴板?或者剪贴板是否放置在键值类型映射中?

2 个答案:

答案 0 :(得分:3)

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

另一方打开剪贴板,查看当前的格式,选择最合适的格式,并相应地进行。

答案 1 :(得分:2)

要添加到@ybungalobill应答,请阅读Windows开发人员中心here中提供的其他信息。 CUT / COPY操作的快速摘录是 -

  

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

     

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

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