OleGetClipboard f函数 (ole2.h)
检索可用于访问剪贴板内容的数据对象。
语法
HRESULT OleGetClipboard(
[out] LPDATAOBJECT *ppDataObj
);
参数
[out] ppDataObj
接收指向剪贴板数据对象的接口指针的 IDataObject 指针变量的地址。
返回值
此函数在成功时返回S_OK。 其他可能的值包括以下内容。
返回代码 | 说明 |
---|---|
|
在 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 |
Library | Ole32.lib |
DLL | Ole32.dll |
API 集 | Windows 10版本 10.0.15063 中引入了 ext-ms-win-com-ole32-l1-1-5 () |