2013-04-16 139 views

回答

0

它通常由系統完成,然而,一些負責任的應用程序還負責要求用戶在離開前釋放剪貼板。

例如MSWord會要求用戶在退出之前將數據保存在內存中。 對於通用目的,您可以將其留給系統。

在這裏請記住,用戶可能想保留在剪貼板(即使在關閉應用程序後),所以你不應該對它進行破解並從內存中刪除它。

+0

當系統完全沒有任何功能時(除非關閉或重新啓動時),」您可以將其留給系統「,應用程序負責它放在剪貼板上的數據,而不是系統 –

+0

@John Willemse:是的,它是真實的,但即使你不應該對它做任何事情,因爲它由用戶擁有,用戶將決定他/她是否想保留它在內存中還是沒有 –

+0

@John Willemse:除了微軟辦公室外,列出一個應用程序,負責清理剪貼板或要求用戶這樣做,你幾乎找不到幾個,這是有原因的 –

1

你的應用程序負責處理剪貼板上的數據,如果它放在那裏的話。這就是爲什麼許多應用程序(如Microsoft Office)在退出應用程序時詢問您是否要在剪貼板上保留大量數據的原因。

但是,我強烈建議用戶交互,因爲您不知道用戶是否需要稍後其他位置的剪貼板上的數據。

+1

這取決於如何將數據放在那裏。如果通過'SetClibpoardData'和一個非'NULL'數據參數放在那裏,那麼操作系統負責數據,而不是應用程序。 「[如果SetClipboardData成功,則系統擁有由hMem參數標識的對象。一旦所有權已轉移到系統,應用程序可能不會寫入或釋放數據](http://msdn.microsoft.com/zh-cn/ /library/windows/desktop/ms649051(v=vs.85).aspx)。「 –

+0

感謝雷蒙德,我不知道你的博客的粉絲BTW;) –

7

有兩種將數據放在剪貼板上的方法。

方法1:將數據直接到剪貼板,通過調用SetClipboardData並通過一個非NULL值作爲第二參數。在這種情況下,系統將對數據負責,而且您不應該自行釋放它。

方法2:將一個佔位符到剪貼板上,通過調用SetClipboardData並傳遞NULL作爲第二個參數。在這種情況下,應用程序負責數據,直到它調用SetClibpoardData的第二個參數爲非NULL,此時責任轉移到操作系統。

從您的問題中您不清楚您正在使用哪種方法。

3

Read the documentation

如果SetClipboardData成功,該系統擁有由HMEM參數標識的對象。該應用程序可能無法寫入或釋放數據,一旦所有權已經轉移到系統

保持跟蹤剪貼板中的數據,使您可以從剪貼板關閉您的應用程序是完全可選時將其刪除。一旦數據在剪貼板上,系統就擁有它,並且它與應用程序分離,因此您可以選擇將其保留在剪貼板上,以便在應用程序關閉後保持可繼續使用狀態。除非您使用延遲渲染,否則在關閉應用程序時將其從剪貼板中刪除是有意義的,因爲當其他應用程序請求時,您的應用程序將不再運行以呈現數據。