如何处理由多种原因多次发送的剪贴板消息WM_DRAWCLIPBOARD

时间:2015-06-17 13:22:28

标签: c# winapi

“我如何才能看到复制到剪贴板的内容?”......是一个非常常见的问题。就像例如this forum question

一样

我的经验是,有些应用程序会多次触发事件。我发现人们只会说它最后一次被解雇。我该怎么办呢?我怎么知道最后一次?

此外,当我提供Outlook 2007焦点时,它会触发剪贴板并多次触发它。此外,当我在Outlook中单击时,会触发剪贴板消息。我怎么能区分某些东西到剪贴板的真实副本以及我不关心的其他消息。

我知道我可以检查内容是否相同,但在我的情况下这是一个限制,因为使用可能会复制相同的内容两次。

我知道这一点unanswered question here.这只是我问题的一半,人们在任何情况下都不会复制不同的类型。

1 个答案:

答案 0 :(得分:0)

谢谢汉斯给我一些思考的东西。我没有代码作为答案,但可以提供一些关于我如何为我解决这个问题的提示。

  1. Outlook会多次触发剪贴板,甚至会在剪贴板获得焦点时触发剪贴板。解决方案 - 我只对200ms内的其中一个事件做出反应。我也只在按下控制键时对剪贴板事件做出反应。 (对我来说这是一个特殊情况,因为我只想做键盘复制而不是鼠标复制)
  2. 当事件被触发时,它将被另一个程序触发,因此您无法访问剪贴板。解决方案 - 只有一个程序可以访问它,因此您需要在事件发生后继续尝试,您还需要希望其他程序释放剪贴板以便您可以查看它。