Función OleGetClipboard (ole2.h)

Recupera un objeto de datos que puede usar para acceder al contenido del Portapapeles.

Sintaxis

HRESULT OleGetClipboard(
  [out] LPDATAOBJECT *ppDataObj
);

Parámetros

[out] ppDataObj

Dirección de la variable de puntero IDataObject que recibe el puntero de interfaz al objeto de datos del Portapapeles.

Valor devuelto

Esta función devuelve S_OK si se ejecuta correctamente. Otros valores posibles son los siguientes.

Código devuelto Descripción
CLIPBRD_E_CANT_OPEN
Error en la función OpenClipboard usada en OleFlushClipboard .
CLIPBRD_E_CANT_CLOSE
Error en la función CloseClipboard usada en OleFlushClipboard .

Comentarios

Precaución Los datos del Portapapeles no son de confianza. Analice cuidadosamente los datos antes de usarlos en la aplicación.
 
Si va a escribir una aplicación que puede aceptar datos del Portapapeles, llame a la función OleGetClipboard para obtener un puntero a la interfaz IDataObject que puede usar para recuperar el contenido del Portapapeles.

OleGetClipboard controla tres casos:

  • La aplicación que colocó datos en el Portapapeles con la función OleSetClipboard todavía se está ejecutando.
  • La aplicación que colocó datos en el Portapapeles con la función OleSetClipboard ha llamado posteriormente a la función OleFlushClipboard .
  • Hay datos de una aplicación que no es OLE en el Portapapeles.
En el primer caso, el objeto de datos del Portapapeles devuelto por OleGetClipboard puede reenviar llamadas según sea necesario al objeto de datos original colocado en el Portapapeles y, por lo tanto, puede realizar llamadas RPC.

En el segundo caso, OLE crea un objeto de datos predeterminado y lo devuelve al usuario. Dado que los datos del Portapapeles se originaron en una llamada a OleSetClipboard , el objeto de datos proporcionado por OLE contiene información más precisa sobre el tipo de datos en el Portapapeles. En concreto, se conoce el medio original (TYMED) en el que se ofrecieron los datos. Por lo tanto, si una aplicación de origen de datos ofrece un formato de Portapapeles determinado, por ejemplo cfFOO, en un objeto de almacenamiento y llama a la función OleFlushClipboard , el objeto de almacenamiento se copia en la memoria y el identificador de memoria hglobal se coloca en el Portapapeles. A continuación, cuando la función OleGetClipboard crea su objeto de datos predeterminado, el hglobal del Portapapeles se convierte de nuevo en un objeto IStorage . Además, el enumerador FORMATETC y el método IDataObject::QueryGetData indicarían correctamente que el formato original del Portapapeles (cfFOO) vuelve a estar disponible en un TYMED_ISTORAGE.

En el tercer caso, OLE sigue creando un objeto de datos predeterminado, pero no hay información especial sobre los datos en los formatos del Portapapeles (especialmente para los formatos de Portapapeles definidos por la aplicación). Por lo tanto, si un medio de almacenamiento basado en hGlobal se colocaba directamente en el Portapapeles mediante una llamada a la función SetClipboardData , el enumerador FORMATETC y el método IDataObject::QueryGetData no indicarían que los datos estaban disponibles en un medio de almacenamiento. Sin embargo, una llamada al método IDataObject::GetData para TYMED_ISTORAGE se realizará correctamente. Debido a estas limitaciones, se recomienda encarecidamente que las aplicaciones compatibles con OLE interactúen con el Portapapeles mediante las funciones del Portapapeles OLE.

El objeto de datos del Portapapeles creado por la función OleGetClipboard tiene una implementación de IDataObject bastante extensa. El objeto de datos proporcionado por OLE puede convertir los datos del formato del Portapapeles OLE 1 en la representación esperada por un llamador OLE 2. Además, los datos estructurados están disponibles en cualquier medio estructurado o plano, y cualquier dato plano está disponible en cualquier medio plano. Sin embargo, los objetos GDI (como metarchivos y mapas de bits) solo están disponibles en sus medios respectivos.

Tenga en cuenta que el miembro tymed de la estructura FORMATETC utilizada en el enumerador FORMATETC contiene la unión de medios admitidos. Las aplicaciones que buscan información específica (por ejemplo, si CF_TEXT está disponible en TYMED_HGLOBAL) deben realizar la máscara de bits adecuada al comprobar este valor.

Si llama a la función OleGetClipboard , solo debe mantener pulsado en el IDataObject devuelto durante un tiempo muy corto. Consume recursos en la aplicación que lo ofrecieron.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado ole2.h
Library Ole32.lib
Archivo DLL Ole32.dll
Conjunto de API ext-ms-win-com-ole32-l1-1-5 (introducido en Windows 10, versión 10.0.15063)

Consulte también

OleSetClipboard