如何获取剪贴板粘贴通知并提供我自己的数据?

时间:2010-02-19 17:12:37

标签: c# .net clipboard paste

对于我正在编写的小实用程序(.NET,C#),我想监视剪贴板复制操作和剪贴板粘贴操作。

我的想法是在粘贴到任意应用程序时提供我自己的数据。

使用clipboard viewer可以轻松完成对复制操作的监控。

对我来说似乎更先进的一点是写一个“剪贴板粘贴提供者”:

  • 回答“应用程序的可用格式”查询。
  • 向应用程序粘贴操作提供数据。

我找到了this postingthis posting,但它们似乎都没有真正帮助我。

我猜我不得不模仿/劫持当前的剪贴板。

问题:

是否可以在粘贴操作方面“包装”剪贴板并提供我自己的“剪贴板代理”?

2 个答案:

答案 0 :(得分:11)

您需要使用Windows钩子挂钩剪贴板挂钩。 Windows钩子是一种拦截发生的全局事件并提供自己的钩子过程来替换或拦截消息的方法。请查看CodeProject,了解如何挂钩。这是一个clipboard helper,用于侦听复制/粘贴功能。这是Clipboard spy就是这样做的。这是另一篇实现Clipboard hook

的文章

答案 1 :(得分:11)

查看WinAPI中的“延迟呈现”。使用此技术,您可以使用空句柄加载剪贴板,并在粘贴时,Windows会通过WM_RENDERFORMAT消息通知您。这就是像Excel这样的应用程序可以通过“复制”25种不同的格式来逃脱。它并没有真正复制它们。它实际上会产生一些常见的,如TEXT,但“广告”其他像Bitmap,Html,WKS等,选择等待看看目标应用程序想要粘贴的内容。
考虑一下:您可以在Excel中选择5000个单元格并进行复制,并且可以非常快速地更新剪贴板。现在粘贴到Windows Paint中,当Excel尝试渲染一个巨大的位图时,您的系统突然爬行。在使用所有可用内存并吃掉页面文件之后,旧版本通常会崩溃。这回到了Windows 3.1天。现代版本给出了关于“位图太大”或“内存不足”的消息。 警告:监视剪贴板并自动粘贴数据的应用程序会过早触发延迟渲染,例如远程桌面,VMWare,Office剪贴板和我自己的ClipMate。可以通过使用CF_Clipboard_Viewer_Ignore标志告诉某些剪贴板监视程序忽略剪贴板更新,我在此处记录了这一点: link text

相关问题