次の方法で共有


OleSetClipboard 関数 (ole2.h)

特定のデータ オブジェクトへのポインターをクリップボードに配置します。 これにより、 OleGetClipboard 関数からデータ オブジェクトにアクセスできるようになります。

構文

HRESULT OleSetClipboard(
  [in] LPDATAOBJECT pDataObj
);

パラメーター

[in] pDataObj

クリップボードに配置するデータを取得できるデータ オブジェクト上の IDataObject インターフェイスへのポインター。 このパラメーターには NULL を指定できます。この場合、クリップボードは空になります。

戻り値

この関数は、成功したS_OKを返します。 その他の使用可能な値は次のとおりです。

リターン コード 説明
CLIPBRD_E_CANT_OPEN
OleSetClipboard 内で使用される OpenClipboard 関数が失敗しました。
CLIPBRD_E_CANT_EMPTY
OleSetClipboard 内で使用される EmptyClipboard 関数が失敗しました。
CLIPBRD_E_CANT_CLOSE
OleSetClipboard 内で使用される CloseClipboard 関数が失敗しました。
CLIPBRD_E_CANT_SET
OleSetClipboard 内で使用される SetClipboardData 関数が失敗しました。

解説

クリップボード操作のソースとして機能するアプリケーションを作成する場合は、次の操作を行う必要があります。

  • クリップボードにコピーまたは切り取るデータのデータ オブジェクト ( IDataObject インターフェイス) を作成します。 このオブジェクトは、OLE ドラッグ アンド ドロップ操作で使用されるのと同じオブジェクトである必要があります。
  • OleSetClipboard を呼び出して、IDataObject ポインターをクリップボードに配置し、OleGetClipboard 関数からアクセスできるようにします。 OleSetClipboard では、データ オブジェクトに対して IUnknown::AddRef メソッドも呼び出されます。
  • 必要に応じて、クリップボードにデータ オブジェクトを配置した後に解放して、アプリケーションの IUnknown::AddRef カウンターを解放します。
  • ユーザーがデータを切り取る (ドキュメントからデータを削除し、クリップボードに貼り付ける) 場合は、ドキュメントからデータを削除します。
すべての形式は、遅延レンダリングを使用してクリップボードに提供されます ( OleFlushClipboard の呼び出しでデータがクリップボードにレンダリングされない限り、クリップボードにはデータ オブジェクトへのポインターのみが含まれます)。 OLE 1 の互換性に必要な形式は、存在する OLE 2 形式から合成され、クリップボードにも配置されます。

OleSetClipboard 関数は、クリップボードの所有権を内部 OLE ウィンドウ ハンドルに割り当てます。 遅延レンダリングを有効にするために、データ オブジェクトの参照カウントが 1 増加します。 参照カウントは、OleFlushClipboard 関数の呼び出し、またはパラメーター値として NULL を指定する OleSetClipboard の後続の呼び出しによって減少します (クリップボードをクリアします)。

アプリケーションが ( OpenClipboard 関数を呼び出して直接または間接的に) クリップボードを開くと、そのクリップボードは閉じられるまで他のアプリケーションで使用できません。 クリップボードが現在別のアプリケーションによって開かれている場合、 OleSetClipboard は失敗します。 内部 OLE ウィンドウ ハンドルは、クリップボードにあるデータ オブジェクトの IDataObject 実装に委任することで、WM_RENDERFORMATメッセージを満たします。

OleSetClipboard のパラメーター値として NULL を指定すると、現在のクリップボードが空になります。 クリップボードの内容が以前の OleSetClipboard 呼び出しの結果であり、クリップボードが解放されている場合は、前の呼び出しに渡された IDataObject ポインターが解放されます。 クリップボードの所有者は、以前に提供されたデータがクリップボードに存在しなくなったことを示すシグナルとして、これを使用する必要があります。

アプリケーションを閉じた後にデータをクリップボードに残す必要がある場合は、NULL パラメーター値で OleSetClipboard を呼び出すのではなく、OleFlushClipboard を呼び出す必要があります。

要件

   
サポートされている最小のクライアント 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 で導入)

関連項目

OleFlushClipboard

OleGetClipboard

OleIsCurrentClipboard