我在寫一個小工具程序來監視我的剪貼板。這在目前的情況下效果很好,但是一位朋友告訴我,它隨機會停止在剪貼板更換時顯示警報,並且重新啓動會修復它。
我無法複製,但最終我自己碰到它 - 應用程序已停止接收WM_DRAWCLIPBOARD
事件。如何判斷我的應用程序是否已從剪貼板偵聽器鏈中刪除?
如何知道我的應用程序何時從偵聽器鏈中刪除?
我在寫一個小工具程序來監視我的剪貼板。這在目前的情況下效果很好,但是一位朋友告訴我,它隨機會停止在剪貼板更換時顯示警報,並且重新啓動會修復它。
我無法複製,但最終我自己碰到它 - 應用程序已停止接收WM_DRAWCLIPBOARD
事件。如何判斷我的應用程序是否已從剪貼板偵聽器鏈中刪除?
如何知道我的應用程序何時從偵聽器鏈中刪除?
這是剪貼板監聽器鏈的危險之一:一個不好的應用程序可能會損壞鏈。不使用SetClipboardViewer
函數,而是使用AddClipboardFormatListener
,它不存在此問題。
我現在感到不得不添加一個鏈接到[你自己的博客文章](http://blogs.msdn.com/b/oldnewthing/archive/2011/09 /23/10213224.aspx) – Justin 2013-02-20 17:31:43
如果您正在調試使用SetClipboardViewer並且應用程序崩潰的應用程序,或者您在調試器中停止應用程序,或以某種其他方式繞過剪貼板鏈的恢復,則Windows中的性能會降低,看似與Windows無關的特性,如Alt-Tab,或者恢復最小化窗口,停止工作。如果您重新啓動Windows,它們會回來。
以這種方式將自身插入到剪貼板鏈中的應用程序應在主窗體的Dispose期間或在其他適當的時間調用ChangeClipboardChain以避免此問題。如果您在調試器中停止應用程序,則不會調用Dispose。
我還沒有嘗試過AddClipboardFormatListener;我第一次聽說它;我將嘗試在我正在調試時查看我是否可以在自己的應用程序中避免此問題。
您是否將WM_DRAWCLIPBOARD消息傳遞給鏈中的下一個查看器?你正在處理WM_CHANGECBCHAIN消息嗎?沒有代碼,我們只能推測。 – 2013-02-20 16:42:47
我一直在做這兩個,就像一個很好的小應用程序;) – 2013-02-21 09:43:39