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

本文关键字:剪贴板 侦听器 删除 是否 应用程序 何判断 判断 我的 | 更新日期: 2023-09-27 18:00:13

我正在编写一个小型实用程序来监视我的剪贴板。这目前运行得很好,但一位朋友告诉我,它将在剪贴板更改时随机停止显示警报,重新启动可以修复它。
我无法复制,但最终我自己遇到了它——应用程序已停止接收WM_DRAWCLIPBOARD事件。

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

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

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

如果您正在调试一个使用SetClipboardViewer的应用程序,而该应用程序崩溃,或者您在调试器中停止了该应用程序,或者以其他方式绕过了剪贴板链的恢复,则Windows中的性能会下降,以至于Windows的看似无关的功能(如Alt Tab或恢复最小化的窗口)停止工作。如果你重新启动Windows,它们会回来。

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

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