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

标签 c# .net clipboard paste

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

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

使用 clipboard viewer 可以轻松监控复制操作.

对我来说似乎更高级的东西是编写“剪贴板粘贴提供程序”:

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

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

我猜我必须以某种方式模仿/劫持当前剪贴板。

问题:

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

最佳答案

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

关于c# - 如何获取剪贴板粘贴通知并提供我自己的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2298209/

相关文章:

.net - 具有事件溯源的领域模型

C#/.NET - 最小并行化快速排序导致性能下降

vim - 在 Vim 上运行 bash 命令并将结果复制到剪贴板

c# - 在 Walther MFS100 支票扫描仪上检测到 CallbackOnCollectedDelegate

c# - Java中静态{...}的c#等价物是什么?

c# - Ok Result 的单元测试测试

.net - 我如何要求类定义上的属性?

c# - 使用 ref 而不是返回相同类型的性能成本?

javascript - 粘贴前更新剪贴板数据(不是 'paste' 事件)

javascript - 如何使用 Javascript 为 asp :label? 执行 "select all"和 "copy to clipboard"