代码之家  ›  专栏  ›  技术社区  ›  Uwe Keim

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

  •  9
  • Uwe Keim  · 技术社区  · 15 年前

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

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

    通过使用 clipboard viewer .

    对于我来说,更高级的功能是编写一个“剪贴板粘贴提供程序”:

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

    我发现 this posting this posting 但他们似乎都没有真正帮助我。

    我想我必须模仿/劫持当前的剪贴板。

    问题:

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

    2 回复  |  直到 8 年前
        1
  •  11
  •   t0mm13b    8 年前

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

        2
  •  10
  •   Chris Thornton    15 年前

    查看winapi中的“延迟渲染”。使用这种技术,您可以用空句柄加载剪贴板,粘贴后,Windows会用一条wm_renderformat消息通知您。这就是为什么像Excel这样的应用程序可以“复制”25种不同的格式。这并不是全部复制。它实际上会生成一些常见的内容,比如文本,但是“广告”其他内容,比如位图、HTML、WK等,选择等待查看目标应用程序希望粘贴的内容。
    考虑一下:您可以在Excel中选择5000个单元格并进行复制,剪贴板的更新速度非常快。现在粘贴到Windows画图中,当Excel试图呈现一个巨大的位图时,系统会突然爬行。旧版本通常会崩溃,在使用了所有可用的内存并占用了页面文件之后。不过,这又回到了3.1天的窗口。现代版本会给出“位图太大”或“内存不足”的消息。 警告:延迟渲染将由监视剪贴板并自动将数据粘贴到自身的应用程序过早触发,如远程桌面、VMware、Office剪贴板和我自己的clipmate。一些剪贴板监控程序可以通过使用我在这里记录的cf_clipboard_viewer_ignore标志来指示忽略剪贴板更新: link text