2013-02-20 22 views
2

我在写一个小工具程序来监视我的剪贴板。这在目前的情况下效果很好,但是一位朋友告诉我,它随机会停止在剪贴板更换时显示警报,并且重新启动会修复它。
我无法复制,但最终我自己碰到它 - 应用程序已停止接收WM_DRAWCLIPBOARD事件。如何判断我的应用程序是否已从剪贴板侦听器链中删除?

如何知道我的应用程序何时从侦听器链中删除?

+0

您是否将WM_DRAWCLIPBOARD消息传递给链中的下一个查看器?你正在处理WM_CHANGECBCHAIN消息吗?没有代码,我们只能推测。 – 2013-02-20 16:42:47

+0

我一直在做这两个,就像一个很好的小应用程序;) – 2013-02-21 09:43:39

回答

6

这是剪贴板监听器链的危险之一:一个不好的应用程序可能会损坏链。不使用SetClipboardViewer函数,而是使用AddClipboardFormatListener,它不存在此问题。

+2

我现在感到不得不添加一个链接到[你自己的博客文章](http://blogs.msdn.com/b/oldnewthing/archive/2011/09 /23/10213224.aspx) – Justin 2013-02-20 17:31:43

1

如果您正在调试使用SetClipboardViewer并且应用程序崩溃的应用程序,或者您在调试器中停止应用程序,或以某种其他方式绕过剪贴板链的恢复,则Windows中的性能会降低,看似与Windows无关的特性,如Alt-Tab,或者恢复最小化窗口,停止工作。如果您重新启动Windows,它们会回来。

以这种方式将自身插入到剪贴板链中的应用程序应在主窗体的Dispose期间或在其他适当的时间调用ChangeClipboardChain以避免此问题。如果您在调试器中停止应用程序,则不会调用Dispose。

我还没有尝试过AddClipboardFormatListener;我第一次听说它;我将尝试在我正在调试时查看我是否可以在自己的应用程序中避免此问题。

相关问题