Поделиться через


Функция OleGetClipboard (ole2.h)

Извлекает объект данных, который можно использовать для доступа к содержимому буфера обмена.

Синтаксис

HRESULT OleGetClipboard(
  [out] LPDATAOBJECT *ppDataObj
);

Параметры

[out] ppDataObj

Адрес переменной указателя IDataObject , которая получает указатель интерфейса на объект данных буфера обмена.

Возвращаемое значение

Эта функция возвращает S_OK об успешном выполнении. Ниже перечислены другие возможные значения.

Код возврата Описание
CLIPBRD_E_CANT_OPEN
Сбой функции OpenClipboard , используемой в OleFlushClipboard .
CLIPBRD_E_CANT_CLOSE
Сбой функции CloseClipboard , используемой в OleFlushClipboard .

Комментарии

Осторожностью Данные буфера обмена не являются доверенными. Тщательно проанализируйте данные, прежде чем использовать их в приложении.
 
Если вы пишете приложение, которое может принимать данные из буфера обмена, вызовите функцию OleGetClipboard , чтобы получить указатель на интерфейс IDataObject , который можно использовать для получения содержимого буфера обмена.

OleGetClipboard обрабатывает три варианта:

  • Приложение, которое разместило данные в буфер обмена с функцией OleSetClipboard , по-прежнему работает.
  • Приложение, которое помещает данные в буфер обмена с помощью функции OleSetClipboard , впоследствии вызывает функцию OleFlushClipboard .
  • В буфере обмена есть данные из приложения, отличного от OLE.
В первом случае объект данных буфера обмена, возвращаемый OleGetClipboard , может при необходимости переадресовать вызовы исходному объекту данных, размещенного в буфере обмена, и, таким образом, потенциально может выполнять вызовы RPC.

Во втором случае OLE создает объект данных по умолчанию и возвращает его пользователю. Поскольку данные в буфере обмена получены из вызова OleSetClipboard , предоставленный OLE-объект данных содержит более точные сведения о типе данных в буфере обмена. В частности, известен исходный носитель (TYMED), на котором были предложены данные. Таким образом, если приложение источника данных предлагает определенный формат буфера обмена, например cfFOO, в объекте хранилища и вызывает функцию OleFlushClipboard , объект хранилища копируется в память, а дескриптор памяти hglobal помещается в буфер обмена. Затем, когда функция OleGetClipboard создает объект данных по умолчанию, hglobal из буфера обмена снова становится объектом IStorage . Кроме того, перечислитель FORMATETC и метод IDataObject::QueryGetData правильно указывают на то, что исходный формат буфера обмена (cfFOO) снова доступен на TYMED_ISTORAGE.

В третьем случае OLE по-прежнему создает объект данных по умолчанию, но нет специальных сведений о данных в форматах буфера обмена (особенно для форматов буфера обмена, определяемых приложением). Таким образом, если носитель хранения на основе hGlobal был помещен в буфер обмена непосредственно путем вызова функции SetClipboardData , перечислитель FORMATETC и метод IDataObject::QueryGetData не будут указывать, что данные были доступны на носителе. Однако вызов метода IDataObject::GetData для TYMED_ISTORAGE будет успешным. Из-за этих ограничений настоятельно рекомендуется, чтобы приложения, поддерживающие OLE, взаимодействовали с буфером обмена с помощью функций буфера обмена OLE.

Объект данных буфера обмена, созданный функцией OleGetClipboard , имеет довольно обширную реализацию IDataObject . Объект данных, предоставленный OLE, может преобразовывать данные в формате буфера обмена OLE 1 в представление, ожидаемое вызывающим объектом OLE 2. Кроме того, все структурированные данные доступны на любой структурированной или плоской среде, а любые неструктурированные данные доступны на любой плоской среде. Однако объекты GDI (например, метафайлы и растровые изображения) доступны только на соответствующих носителях.

Обратите внимание, что элемент tymed структуры FORMATETC , используемый в перечислитель FORMATETC , содержит объединение поддерживаемых носителей. Приложения, которые ищут конкретные сведения (например, доступны ли CF_TEXT на TYMED_HGLOBAL), должны выполнять соответствующие битовые запросы при проверке этого значения.

Если вы вызываете функцию OleGetClipboard , вы должны удерживать возвращаемый объект IDataObject в течение очень короткого времени. Он использует ресурсы в приложении, которое его предложило.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header ole2.h
Библиотека Ole32.lib
DLL Ole32.dll
Набор API ext-ms-win-com-ole32-l1-1-5 (представлен в Windows 10 версии 10.0.15063)

См. также раздел

OleSetClipboard