天天看點

22、Windows API 程序間通信,剪貼闆(Clipboard)

    剪貼闆由系統定義,并不屬于任何一個特定的程序。系統中所有程序都可以通路和設定剪貼闆。很多具有“複制”、“粘貼”功能的文字編譯程式都是通過剪貼闆進行操作。<?xml:namespace prefix = o />

    剪貼闆最大的特點就是資料傳輸沒有明确的目标,資料是被動通路的,設定剪貼闆的程式并不知道所設定的資料什麼時候被通路,也不知道被哪個程序通路,剪貼闆中的内容也可以多次通路,直到新的資料寫入。是以通過剪貼闆也是一種可供選擇的程序間通信方式。但是由于系統中任何一個程序都可以無限制地通路剪貼闆,剪貼闆也是一種不可靠的通信方式。

參考[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 函數、接口、程式設計執行個體