Ruby,Windows剪贴板漏洞?

5

问题: 一个Ruby TK GUI应用程序在退出时清空窗口剪贴板,这正常吗?

问题描述: 我有一个TkText,其中包含一些文本,如果我使用Ctrl + C复制然后关闭应用程序,则剪贴板为空。如果在应用程序仍然打开的情况下粘贴一次,一切都能正常工作,粘贴一次之后即使关闭应用程序,它仍然留在剪贴板中。

这是有意发生的吗?


你尝试过在其他应用程序中使用吗?剪贴板可能仅为内容类型协商目的而保留对应用程序的引用。 - mu is too short
我没有这样做,但程序只是由一个TK根和一个TkText组成,没有更多的东西,我没有自己访问剪贴板API。如果它只是一个参考,为什么在我将其Strg + V到其他地方后它能像预期的那样工作呢?问题不清楚吗? - Onetimeposter123
对于那些好奇的人,Strg == Ctrl。 - Chris Thornton
1个回答

2
看起来可能启用了延迟呈现。 您可能已经在诸如Excel,Word,Outlook或几乎任何大型绘图程序之类的应用程序中看到了这一点。 当您复制内容后关闭应用程序时,它会显示“您已将大量数据放入剪贴板,是否要使其可供其他程序使用?” 这是因为使用了“延迟呈现”进行复制,而数据实际上并没有存储在剪贴板上。 剪贴板只有空句柄,如果/当某些应用程序实际请求粘贴(特别是像WKS1,SYLK,EMF,HTML等高级或昂贵的格式),则需要应用程序立即生成它们。 因此,在关闭时,这些应用程序实际上只是处理这些未满足的责任,因为它们将不再存在以回答 WM_RenderFormat 消息。
我预计您的Ruby环境甚至对于简单格式(如CF_TEXT)也使用了延迟呈现,而不是更新具有完全填充数据的剪贴板(许多应用程序会默默地这样做),他们只是清除它。 或者,他们可能确实留下了空句柄。 运行旧版XP剪贴板查看器将向您显示真正空白的剪贴板与认为其中有文本(TEXT出现在可用格式列表中)但实际上只有空句柄之间的区别。

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