다음을 통해 공유


OleGetClipboard 함수(ole2.h)

클립보드의 내용에 액세스하는 데 사용할 수 있는 데이터 개체를 검색합니다.

구문

HRESULT OleGetClipboard(
  [out] LPDATAOBJECT *ppDataObj
);

매개 변수

[out] ppDataObj

클립보드 데이터 개체에 대한 인터페이스 포인터를 수신하는 IDataObject 포인터 변수의 주소입니다.

반환 값

이 함수는 성공에 대한 S_OK 반환합니다. 다른 가능한 값은 다음과 같습니다.

반환 코드 설명
CLIPBRD_E_CANT_OPEN
OleFlushClipboard 내에서 사용되는 OpenClipboard 함수가 실패했습니다.
CLIPBRD_E_CANT_CLOSE
OleFlushClipboard 내에서 사용되는 CloseClipboard 함수가 실패했습니다.

설명

주의 클립보드 데이터를 신뢰할 수 없습니다. 애플리케이션에서 사용하기 전에 데이터를 신중하게 구문 분석합니다.
 
클립보드에서 데이터를 수락할 수 있는 애플리케이션을 작성하는 경우 OleGetClipboard 함수를 호출하여 클립보드의 내용을 검색하는 데 사용할 수 있는 IDataObject 인터페이스에 대한 포인터를 가져옵니다.

OleGetClipboard 는 다음 세 가지 사례를 처리합니다.

  • OleSetClipboard 함수를 사용하여 클립보드에 데이터를 배치한 애플리케이션은 여전히 실행 중입니다.
  • OleSetClipboard 함수를 사용하여 클립보드에 데이터를 배치한 애플리케이션은 이후에 OleFlushClipboard 함수를 호출했습니다.
  • 클립보드에 OLE가 아닌 애플리케이션의 데이터가 있습니다.
첫 번째 경우 OleGetClipboard 에서 반환된 클립보드 데이터 개체는 필요에 따라 호출을 클립보드에 배치된 원래 데이터 개체로 전달할 수 있으므로 잠재적으로 RPC 호출을 수행할 수 있습니다.

두 번째 경우 OLE는 기본 데이터 개체를 만들고 사용자에게 반환합니다. 클립보드의 데이터는 OleSetClipboard 호출에서 시작되었으므로 OLE 제공 데이터 개체는 클립보드의 데이터 형식에 대한 보다 정확한 정보를 포함합니다. 특히 데이터가 제공된 원래 매체(TYMED)가 알려져 있습니다. 따라서 데이터 원본 애플리케이션이 스토리지 개체에서 cfFOO와 같은 특정 클립보드 형식을 제공하고 OleFlushClipboard 함수를 호출하면 스토리지 개체가 메모리에 복사되고 hglobal 메모리 핸들이 클립보드에 배치됩니다. 그런 다음 OleGetClipboard 함수가 기본 데이터 개체를 만들면 클립보드의 hglobal이 다시 IStorage 개체가 됩니다. 또한 FORMATETC 열거자 및 IDataObject::QueryGetData 메서드는 모두 TYMED_ISTORAGE 원래 클립보드 형식(cfFOO)을 다시 사용할 수 있음을 올바르게 나타냅니다.

세 번째 경우에서 OLE는 여전히 기본 데이터 개체를 만들지만 클립보드 형식의 데이터에 대한 특별한 정보는 없습니다(특히 애플리케이션 정의 클립보드 형식의 경우). 따라서 SetClipboardData 함수를 호출하여 hGlobal 기반 스토리지 매체를 클립보드에 직접 배치한 경우 FORMATETC 열거자 및 IDataObject::QueryGetData 메서드는 스토리지 매체에서 데이터를 사용할 수 있음을 나타내지 않습니다. 그러나 TYMED_ISTORAGE 대한 IDataObject::GetData 메서드 호출이 성공합니다. 이러한 제한 사항 때문에 OLE 인식 애플리케이션은 OLE 클립보드 함수를 사용하여 클립보드와 상호 작용하는 것이 좋습니다.

OleGetClipboard 함수에서 만든 클립보드 데이터 개체에는 상당히 광범위한 IDataObject 구현이 있습니다. OLE 제공 데이터 개체는 OLE 1 클립보드 형식 데이터를 OLE 2 호출자가 예상하는 표현으로 변환할 수 있습니다. 또한 구조화된 데이터는 모든 구조적 또는 플랫 매체에서 사용할 수 있으며 모든 플랫 데이터는 모든 플랫 매체에서 사용할 수 있습니다. 그러나 GDI 개체(예: 메타파일 및 비트맵)는 해당 매체에서만 사용할 수 있습니다.

FORMATETC 열거자에 사용되는 FORMATETC 구조체의 tymed 멤버에는 지원되는 매체의 공용 구조체가 포함되어 있습니다. 특정 정보(예: TYMED_HGLOBAL CF_TEXT 사용할 수 있는지 여부)를 찾는 애플리케이션은 이 값을 확인할 때 적절한 비트 마스크를 수행해야 합니다.

OleGetClipboard 함수를 호출하는 경우 매우 짧은 시간 동안만 반환된 IDataObject를 유지해야 합니다. 제공된 애플리케이션의 리소스를 사용합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 ole2.h
라이브러리 Ole32.lib
DLL Ole32.dll
API 세트 ext-ms-win-com-ole32-l1-1-5(Windows 10 버전 10.0.15063에 도입됨)

추가 정보

OleSetClipboard