如何判断我的应用程序是否已从剪贴板侦听器链中删除?

时间:2013-02-20 14:26:49

标签: c# windows winapi clipboard

我正在编写一个小实用程序来监控我的剪贴板。这在当前工作得很好,但是一位朋友告诉我它会随机停止在剪贴板更换时显示警报,并且重新启动会修复它。
我无法重现,但最终我自己遇到了 - 应用程序已停止接收WM_DRAWCLIPBOARD事件。

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

2 个答案:

答案 0 :(得分:6)

这是剪贴板监听链的一个危害:一个不好的应用程序可能会损坏链。不使用SetClipboardViewer函数,而是使用没有此问题的AddClipboardFormatListener

答案 1 :(得分:1)

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

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

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