Функция OleGetClipboard (ole2.h)
Извлекает объект данных, который можно использовать для доступа к содержимому буфера обмена.
Синтаксис
HRESULT OleGetClipboard(
[out] LPDATAOBJECT *ppDataObj
);
Параметры
[out] ppDataObj
Адрес переменной указателя IDataObject , которая получает указатель интерфейса на объект данных буфера обмена.
Возвращаемое значение
Эта функция возвращает S_OK об успешном выполнении. Ниже перечислены другие возможные значения.
Код возврата | Описание |
---|---|
|
Сбой функции OpenClipboard , используемой в OleFlushClipboard . |
|
Сбой функции CloseClipboard , используемой в OleFlushClipboard . |
Комментарии
OleGetClipboard обрабатывает три варианта:
- Приложение, которое разместило данные в буфер обмена с функцией OleSetClipboard , по-прежнему работает.
- Приложение, которое помещает данные в буфер обмена с помощью функции OleSetClipboard , впоследствии вызывает функцию OleFlushClipboard .
- В буфере обмена есть данные из приложения, отличного от OLE.
Во втором случае 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) |