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

How to deal with the clipboard message WM_DRAWCLIPBOARD which is sent multiple time for multiple reasons

"How can I get an event to see what is copied to the clipboard?"..... 是一个很常见的老问题。就像例如 this forum question

我的经验是某些应用程序会多次触发该事件。我发现人们说只处理它最后一次被解雇的时间。我到底应该怎么做?我怎么知道最后一次?

此外,当我为 Outlook 2007 提供焦点时,它会触发剪贴板并触发多次。此外,当我在 Outlook 中点击时,剪贴板消息被触发。我应该如何区分剪贴板中某些内容的真实副本和我不关心的这些其他消息。

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

我知道这个unanswered question here.这只是我问题的一半,无论如何人们都会开始复制不同的类型。

谢谢 Hans 给我一些思考。我没有代码作为答案,但可以就我如何解决这个问题给出一些提示。

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