OleGetClipboardWithEnterpriseInfo 函数 (ole2.h)

启用 Windows 信息保护启发式
从 OLE 剪贴板检索 IDataObject 的应用程序
附带 Windows 信息保护有关数据和
源应用程序。此信息允许
启发式应用程序接管应用 Windows 信息保护
策略,包括显示任何适当的 UI 提示,以及
审核用户显式批准复制的情况
企业数据进入个人上下文。

如果调用应用程序未启用,则为 或
配置为“不允许”以访问企业数据,
则此调用的行为与 OleGetClipboard 完全相同 - 在决定要返回的 IDataObject 之前应用策略,
并提供空字符串作为输出。

语法

HRESULT OleGetClipboardWithEnterpriseInfo(
  [out] IDataObject **dataObject,
  [out] PWSTR       *dataEnterpriseId,
  [out] PWSTR       *sourceDescription,
  [out] PWSTR       *targetDescription,
  [out] PWSTR       *dataDescription
);

参数

[out] dataObject

接收指向剪贴板数据对象的接口指针的 IDataObject 指针变量的地址。

[out] dataEnterpriseId

设置剪贴板数据的应用程序的企业 ID。 如果数据是个人数据,则这是一个空字符串。

[out] sourceDescription

设置剪贴板的应用程序的说明。

[out] targetDescription

要用于审核的调用方应用程序的说明。

[out] dataDescription

要在审核中使用的数据对象的说明。

返回值

此函数在成功时返回S_OK。 其他可能的值包括以下内容。

返回代码 说明
CLIPBRD_E_CANT_OPEN
在 OleFlushClipboard 中使用的 OpenClipboard 函数失败。
CLIPBRD_E_CANT_CLOSE
在 OleFlushClipboard 中使用的 CloseClipboard 函数失败。

注解

谨慎 剪贴板数据不受信任。 在应用程序中使用数据之前,请仔细分析数据。
 
如果要编写可接受剪贴板数据的应用程序,请调用 OleGetClipboardWithEnterpriseInfo 函数以获取指向 IDataObject 接口的指针,该接口可用于检索剪贴板的内容。

OleGetClipboardWithEnterpriseInfo 处理三种情况:

  • 使用 OleSetClipboard 函数将数据放置在剪贴板上的应用程序仍在运行。
  • 使用 OleSetClipboard 函数将数据放置在剪贴板上的应用程序随后调用 了 OleFlushClipboard 函数。
  • 剪贴板上有来自非 OLE 应用程序的数据。
在第一种情况下, OleGetClipboardWithEnterpriseInfo 返回的剪贴板数据对象可能会根据需要将调用转发到放置在剪贴板上的原始数据对象,因此,可能会进行 RPC 调用。

第二种情况下,OLE 创建默认数据对象并将其返回给用户。 由于剪贴板上的数据源自 OleSetClipboard 调用,因此 OLE 提供的数据对象包含有关剪贴板上数据类型的更准确信息。 具体而言,提供数据的原始介质 (TYMED) 是已知的。 因此,如果数据源应用程序在存储对象上提供特定的剪贴板格式(例如 cfFOO),并调用 OleFlushClipboard 函数,则会将存储对象复制到内存中,并将 hglobal 内存句柄放在剪贴板上。 然后,当 OleGetClipboardWithEnterpriseInfo 函数创建其默认数据对象时,剪贴板中的 hglobal 再次成为 IStorage 对象。 此外, FORMATETC 枚举器和 IDataObject::QueryGetData 方法都将正确指示原始剪贴板格式 (cfFOO) 在TYMED_ISTORAGE上再次可用。

在第三种情况下,OLE 仍会创建默认数据对象,但剪贴板格式中的数据 (没有特殊信息,尤其是应用程序定义的剪贴板格式) 。 因此,如果通过调用 SetClipboardData 函数直接将基于 hGlobal 的存储介质置于剪贴板上, 则 FORMATETC 枚举器以及 IDataObject::QueryGetData 方法不会指示数据在存储介质上可用。 但是,为TYMED_ISTORAGE调用 IDataObject::GetData 方法会成功。 由于这些限制,强烈建议 OLE 感知应用程序使用 OLE 剪贴板函数与剪贴板进行交互。

由 OleGetClipboardWithEnterpriseInfo 函数创建的剪贴板数据对象具有相当广泛的 IDataObject 实现。 OLE 提供的数据对象可以将 OLE 1 剪贴板格式数据转换为 OLE 2 调用方预期的表示形式。 此外,任何结构化或平面介质上都提供任何结构化数据,而任何平面数据在任何平面介质上都可用。 但是, ((如图元文件和位图) )的 GDI 对象仅在其各自的介质上可用。

请注意, FORMATETC 枚举器中使用的 FORMATETC 结构的 tymed 成员包含受支持媒体的联合。 查找特定信息 ((例如CF_TEXT是否在 TYMED_HGLOBAL) 上可用)的应用程序应在检查此值时执行适当的位掩码。

如果调用 OleGetClipboardWithEnterpriseInfo 函数,则应只保留返回的 IDataObject 很短的时间。 它使用提供它的应用程序中的资源。

要求

要求
最低受支持的客户端 Windows 10 [仅限桌面应用]
最低受支持的服务器 Windows Server 2016 [仅限桌面应用]
目标平台 Windows
标头 ole2.h
Library Ole32.lib
DLL Ole32.dll

另请参阅

OleGetClipboard

OleSetClipboard