剪貼簿由系統定義,並不屬於任何一個特定的進程。系統中所有進程都可以訪問和設定剪貼簿。很多具有“複製”、“粘貼”功能的文字編譯器都是通過剪貼簿進行操作。
剪貼簿最大的特點就是資料轉送沒有明確的目標,資料是被動訪問的,設定剪貼簿的程式並不知道所設定的資料什麼時候被訪問,也不知道被哪個進程訪問,剪貼簿中的內容也可以多次訪問,直到新的資料寫入。因此通過剪貼簿也是一種可供選擇的處理序間通訊方式。但是由於系統中任何一個進程都可以無限制地訪問剪貼簿,剪貼簿也是一種不可靠的通訊方式。
參考[1,2]中介紹了對剪貼簿的基本操作,包括設定剪貼簿中的資料、從剪貼簿擷取資料等;及如何對剪貼簿的修改進行監視,這種機制可以使用程式及時發現剪貼簿中的資料變化;使用通過剪貼簿傳輸資料可以具有即時性;還有剪貼簿中資料的格式及自訂資料格式的方法。
Clipboard[3]。
1、監視剪貼簿
原理:
(1) WM_DRAWCLIPBOA
系統提供了WM_DRAWCLIPBOARD訊息用於監視剪貼簿的變。如果調用
SetClipboardViewer函數設定了視窗為剪貼簿查看器,那麼當剪貼簿中的內容變化時,所註冊的查看器視窗會收到WM_CHANGECBCHAIN訊息和WM_DRAWCLIPBOARD訊息。
當剪貼簿中的內容變化時,視窗會收到WM DRAWCLIPBOARD訊息。當查看器鏈新的節點加入或有節點退出視窗會收到WM_CHANGECBCHAIN訊息。
(2) SetClipboardViewer函數
2、剪貼簿資料格式
剪貼簿中可能會存在各種各樣的資料。因此剪貼簿中在儲存資料的同時還需要儲存資料的格式資訊。
系統使用一個UINT類型的資料來表示剪貼簿中的資料格式。在這些格式資訊中,有很多是各種應用程式之間通用的,比如文本、位元影像等。這些資料格式已經由系統預先定義,稱為標準格式。
還有一些應用程式也希望自行定義剪貼簿的資料格式,這樣可以方便地在同一個應用程式的不同執行個體間進行資料傳遞而不需要對資料的格式進行過多的處理(典型的就包括Word)。
參考
[1] 精通Windows API 函數、介面、編程執行個體
[2] http://www.cnblogs.com/mydomain/archive/2010/09/04/1818257.html
[3] http://msdn.microsoft.com/en-us/library/ms649012%28VS.85%29.aspx