OleGetClipboard
Retrieves a data object that you can use to access the clipboard contents.
HRESULT OleGetClipboard(
IDataObject ** ppDataObj
| //Points to location where a pointer to the data object is placed
|
);
|
|
Parameter
ppDataObj
Points to the location where a pointer to the retrieved data object can be
placed.
Return Values
S_OK
Indicates the data object was successfully retrieved.
E_OUTOFMEMORY
Indicates the data object was not returned due to a lack of memory.
CLIPBRD_E_CANT_CLOSE
Indicates the Windows
CloseClipboard function used within
OleGetClipboard failed.
CLIPBRD_E_CANT_OPEN
Indicates the Windows
OpenClipboard function used with
OleGetClipboard failed.
Comments
If you are writing an application that can accept data from the clipboard, you
call
OleGetClipboard to get a pointer to a data object that you can use to retrieve the contents
of the clipboard.
There are three cases that the
OleGetClipboard function handles:
- The application that placed data on the clipboard with the OleSetClipboard function is still running.
- The application that placed data on the clipboard with the OleSetClipboard function has subsequently called the OleFlushClipboard function.
- There is data from a non-OLE application on the clipboard.
In the first case, the clipboard data object returned by the
OleGetClipboard function may forward calls as necessary to the original data object placed on
the clipboard and, thus, can potentially make RPC calls.
In the second case, OLE creates a default data object and returns it to the
user. However, because the data on the Clipboard originated from an
OleSetClipboard call, the OLE-provided data object contains more accurate information about
the type of data on the Clipboard. In particular, the original medium (
TYMED) on which the data was offered is known. Thus, if a data-source application
offers a particular clipboard format, for example cfFOO, on an
IStorage object and calls the
OleFlushClipboard function, the storage object is copied into memory and the
hglobal memory handle is put on the Clipboard. Then, when the
OleGetClipboard function creates its default data object, the
hglobal from the clipboard again becomes an
IStorage object. Furthermore, the
FORMATETC enumerator and the
IDataObject::QueryGetData method would all correctly indicate that the original clipboard format
(cfFOO) is again available on a TYMED_ISTORAGE.
In the third case, OLE still creates a default data object, but there is no
special information about the data in the Clipboard formats (particularly for
application-defined Clipboard formats). Thus, if an hGlobal-based storage medium
were put on the Clipboard directly by a call to the
SetClipboardData function, the
FORMATETC enumerator and the
IDataObject::QueryGetData method would not indicate that the data was available on a storage medium. A
call to the
IDataObject::GetData method for TYMED_ISTORAGE would succeed, however. Because of these
limitations, it is strongly recommended that OLE-aware applications interact with the
Clipboard using the OLE Clipboard functions.
The clipboard data object created by the
OleGetClipboard function has a fairly extensive
IDataObject implementation. The OLE-provided data object can convert OLE 1 clipboard
format data into the representation expected by an OLE 2 caller. Also, any
structured data is available on any structured or flat medium, and any flat data is
available on any flat medium. However, GDI objects (such as metafiles and bitmaps)
are only available on their respective mediums.
Note that the
tymed member of the
FORMATETC structure used in the
FORMATETC enumerator contains the union of supported mediums. Applications looking for
specific information (such as whether CF_TEXT is available on TYMED_HGLOBAL)
should do the appropriate bit masking when checking this value.
If you call the
OleGetClipboard function, you should only hold on to the returned
IDataObject for a very short time. It consumes resources in the application that offered
it.
See Also
OleSetClipboard
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database