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 では 、次の 3 つのケースが処理されます。

  • OleSetClipboard 関数を使用してクリップボードにデータを配置したアプリケーションは、引き続き実行されています。
  • OleSetClipboard 関数を使用してクリップボードにデータを配置したアプリケーションは、その後 OleFlushClipboard 関数を呼び出しました。
  • OLE 以外のアプリケーションのデータがクリップボードにあります。
最初のケースでは、 OleGetClipboard によって返されるクリップボード データ オブジェクトは、必要に応じてクリップボードに配置された元のデータ オブジェクトに呼び出しを転送し、RPC 呼び出しを行う可能性があります。

2 番目のケースでは、OLE によって既定のデータ オブジェクトが作成され、ユーザーに返されます。 クリップボードのデータは OleSetClipboard 呼び出しから生成されるため、OLE 提供のデータ オブジェクトには、クリップボード上のデータの種類に関するより正確な情報が含まれています。 特に、データが提供された元のメディア (TYMED) は既知です。 したがって、データ ソース アプリケーションがストレージ オブジェクトで cfFOO などの特定のクリップボード形式を提供し、 OleFlushClipboard 関数を呼び出すと、ストレージ オブジェクトがメモリにコピーされ、hglobal メモリ ハンドルがクリップボードに格納されます。 次に、 OleGetClipboard 関数が既定のデータ オブジェクトを作成すると、クリップボードの hglobal が 再び IStorage オブジェクトになります。 さらに、 FORMATETC 列挙子と IDataObject::QueryGetData メソッドはすべて、元のクリップボード形式 (cfFOO) がTYMED_ISTORAGEで再び使用可能であることを正しく示します。

3 番目のケースでは、OLE は既定のデータ オブジェクトを作成しますが、クリップボード形式 (特にアプリケーション定義のクリップボード形式) のデータに関する特別な情報はありません。 したがって、 SetClipboardData 関数の呼び出しによって hGlobal ベースのストレージ メディアがクリップボードに直接配置された場合、 FORMATETC 列挙子と IDataObject::QueryGetData メソッドは、データがストレージ メディアで使用可能であることを示しません。 ただし、TYMED_ISTORAGEの IDataObject::GetData メソッドの呼び出しは成功します。 これらの制限があるため、OLE 対応アプリケーションは、OLE クリップボード関数を使用してクリップボードと対話することを強くお勧めします。

OleGetClipboard 関数によって作成されるクリップボード データ オブジェクトには、かなり広範な IDataObject 実装があります。 OLE 提供のデータ オブジェクトは、OLE 1 クリップボード形式データを OLE 2 呼び出し元が想定する表現に変換できます。 また、構造化データは任意の構造化メディアまたはフラット メディアで使用でき、フラット データは任意のフラット メディアで使用できます。 ただし、GDI オブジェクト (メタファイルやビットマップなど) は、それぞれのメディアでのみ使用できます。

FORMATETC 列挙子で使用される FORMATETC 構造体の tymed メンバーには、サポートされているメディアの和集合が含まれていることに注意してください。 特定の情報 (CF_TEXTがTYMED_HGLOBALで使用可能かどうかなど) を探しているアプリケーションは、この値をチェックするときに適切なビットマスクを実行する必要があります。

OleGetClipboard 関数を呼び出す場合は、返された IDataObject を短時間だけ保持する必要があります。 これは、それを提供したアプリケーション内のリソースを消費します。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー ole2.h
Library Ole32.lib
[DLL] Ole32.dll
API セット ext-ms-win-com-ole32-l1-1-5 (Windows 10 バージョン 10.0.15063 で導入)

こちらもご覧ください

OleSetClipboard