OleGetClipboard 函式 (ole2.h)
擷取可用來存取剪貼簿內容的數據物件。
語法
HRESULT OleGetClipboard(
[out] LPDATAOBJECT *ppDataObj
);
參數
[out] ppDataObj
接收剪貼簿數據物件介面指標的 IDataObject 指標變數位址。
傳回值
此函式會在成功時傳回S_OK。 其他可能的值包括下列專案。
傳回碼 | Description |
---|---|
|
OleFlushClipboard 內使用的 OpenClipboard 函式失敗。 |
|
OleFlushClipboard 內使用的 CloseClipboard 函式失敗。 |
備註
OleGetClipboard 會處理三種情況:
- 使用 OleSetClipboard 函式將數據放在剪貼簿上的應用程式仍在執行中。
- 使用 OleSetClipboard 函式在剪貼簿上放置數據的應用程式隨後稱為 OleFlushClipboard 函式。
- 剪貼簿上的非 OLE 應用程式有數據。
第二個案例中,OLE 會建立預設的數據物件,並將它傳回給使用者。 因為剪貼簿上的數據源自 於 OleSetClipboard 呼叫,所以 OLE 提供的數據物件會包含剪貼簿上數據類型的更精確資訊。 特別是,原始媒體 (提供數據的 TYMED) 已知。 因此,如果數據源應用程式在記憶體物件上提供特定的剪貼簿格式,例如 cfFOO,並呼叫 OleFlushClipboard 函式,則會將記憶體物件複製到記憶體中,並將 hglobal 記憶體句柄放在剪貼簿上。 然後,當 OleGetClipboard 函式建立其預設數據物件時,剪貼簿中的 hglobal 會再次變成 IStorage 物件。 此外, FORMATETC 列舉值和 IDataObject::QueryGetData 方法會正確地指出原始剪貼簿格式 (cfFOO) 可在TYMED_ISTORAGE上再次使用。
第三種情況中,OLE 仍然會建立預設數據物件,但剪貼簿格式中的數據沒有特殊資訊, (特別針對應用程式定義的剪貼簿格式) 。 因此,如果呼叫 SetClipboardData 函式直接將 hGlobal 型儲存媒體放在剪貼簿上, FORMATETC 列舉值和 IDataObject::QueryGetData 方法就不會指出數據可在儲存媒體上使用。 不過,呼叫 TYMED_ISTORAGE 的 IDataObject::GetData 方法將會成功。 由於這些限制,強烈建議 OLE 感知應用程式使用 OLE 剪貼簿函式與剪貼簿互動。
OleGetClipboard 函式所建立的剪貼簿數據物件具有相當廣泛的 IDataObject 實作。 OLE 提供的數據物件可以將 OLE 1 剪貼簿格式數據轉換成 OLE 2 呼叫端預期的表示。 此外,任何結構化或平面媒體都可以使用任何結構化或平面數據,而且任何平面媒體上都提供任何一般數據。 不過,GDI 物件 (例如元檔與點陣圖) 僅適用於其各自的媒體。
請注意, FORMATETC 列舉值中使用的 FORMATETC 結構的 tymed 成員包含支援的媒體聯集。 尋找特定資訊的應用程式 (,例如CF_TEXT是否可在TYMED_HGLOBAL) 上执行适当的位屏蔽检查此值。
如果您呼叫 OleGetClipboard 函式,就應該只保留傳回 的 IDataObject 一段非常短的時間。 它會取用應用程式中提供的資源。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | ole2.h |
程式庫 | Ole32.lib |
Dll | Ole32.dll |
API 集合 | ext-ms-win-com-ole32-l1-1-5 (Windows 10 10.0.15063 版) |