想了解Windows剪贴板内部机制

5

我对学习Windows系统内部和工作原理非常感兴趣。我倾向于学习Windows系统编程。在这种情况下,我很好奇Windows剪贴板在内部如何运作:

  • 当我们选择文本、图像等并按Ctrl + C时,会发生什么?
  • 当我们在不同的应用程序中按Ctrl + V时,会发生什么?
  • 复制的数据存储在哪里?复制的数据是否进入内核模式内存 - 即所有进程共享的内存中?
  • 复制的数据如何变得可供另一个进程使用?

我想从系统程序员的角度了解上述问题的答案。

此外,请分享任何讨论Windows剪贴板内部的资源。


4
请从这里开始,阅读微软的描述:http://msdn.microsoft.com/en-us/library/windows/desktop/ms648709.aspx - Mark Ransom
很抱歉,@MarkRansom,文档没有提到复制内存的内存管理。一个简单的例子是,在关闭源应用程序后,通过GlobalAlloc分配的对象存储在哪里? - Alex Aparin
1个回答

3

我网站上有一些很好的资源:http://www.clipboardextender.com,它讲述了剪贴板查看器的实现、典型错误、应该和不应该做的事情。

基本上,剪贴板是一个共享内存区域,你可以将数据复制到其中(例如,在用户按下Ctrl+C键时进行“复制”操作),也可以从其中复制数据(即“粘贴”)。

这些数据可以同时以几十种常见格式以及任意数量的程序员定义格式表示。但是,要完全“备份”剪贴板并像原来一样还原它是不可能的,因为这会影响其他程序,给用户带来负面体验。了解“延迟渲染”的原理,并考虑当Excel用户在电子表格中复制5000行×255列并按下Ctrl+V时会发生什么,就能理解延迟渲染的魔力(和陷阱)。


“共享内存”是虚拟内存中的一个固定块,对吗?因此它有一个预定大小? - flow2k
flow2k - 大小由复制数据到剪贴板的程序确定。它分配一个足够大的块来容纳数据。因此,大小可能会有很大的变化。 - Chris Thornton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接