Benutzer-Werkzeuge

Webseiten-Werkzeuge


windows:zwischenablage

Zwischenablage

Die Zwischenablage ist viel komplizierter als man auf den ersten Blick denkt.

Über die Zwischenablage

Hier einige Auszüge aus offiziellen Microsoft-Papieren.

aus http://msdn.microsoft.com/en-us/library/windows/desktop/ms649012(v=vs.85).aspx

Die Zwischenablage ist ein Satz von Funktionen und Nachrichten, die es Anwendungsprogrammen ermöglichen, Daten zu übertragen. Da alle Anwendungen Zugriff auf die Zwischenablage haben, können die Daten problemlos zwischen Anwendungen oder innerhalb einer Anwendung übertragen werden.

Die Zwischenablage ist benutzergetrieben. Ein Fenster kann Daten zu oder aus der Zwischenablage nur in Reaktion auf einen Benutzerbefehl übertragen.

Ein Memory-Objekt in der Zwischenablage liegt in einem oder mehreren der möglichen Zwischenablage-Formate vor. Jedes Format ist intern durch eine natürliche Zahl gekennzeichnet. Für (vordefinierte) Standard-Zwischenablageformate ist dieser Wert eine Konstante, die in Winuser.h definiert ist; für registrierte Zwischenablage-Formate ist es der Rückgabewert der Funktion RegisterClipboardFormat. Abgesehen von den registrierten Zwischenablage-Formaten, führen einzelne Fenster die meisten Zwischenablage-Operationen aus. Normalerweise überträgt ein Fenster Informationen an oder aus der Zwischenablage in Reaktion auf die WM_COMMAND-Nachricht.

Clipboard Befehle

Ausschneiden: Legt eine Kopie der aktuellen Auswahl in die Zwischenablage und löscht die Auswahl aus dem Dokument. Der bisherige Inhalt der Zwischenablage wird gelöscht. Kopieren: Legt eine Kopie der aktuellen Auswahl in der Zwischenablage. Das Dokument bleibt unverändert. Der bisherige Inhalt der Zwischenablage wird gelöscht. Einfügen: Ersetzt die aktuelle Auswahl mit dem Inhalt der Zwischenablage. Der Inhalt der Zwischenablage wird nicht verändert. Löschen: Löscht die aktuelle Auswahl aus dem Dokument. Der Inhalt der Zwischenablage wird nicht verändert, d.h., dieser Befehl hat keinen Einfluss auf die Zwischenablage; er wird hier lediglich der Vollständigkeit halber aufgeführt.

Zwischenablage-Reihenfolge-Nummer

Für jeden Rechner (bzw. angemeldeten User) vergibt die Zwischenablage eine zugehörige Reihenfolgenummer. Diese Zahl wird inkrementiert, sobald sich der Inhalt der Zwischenablage ändert. Um die ZwischenablageReihenfolge-Nummer zu erhalten, rufen Sie die Funktion GetClipboardSequenceNumber auf.

Clipboard-Viewer

Ein Zwischenablage-Viewer ist ein Fenster, das den aktuellen Inhalt der Zwischenablage anzeigt. Das Zwischenablage-Viewer-Fenster hat keinen Einfluss auf die Datentransaktionsfunktionen der Zwischenablage.

Typischerweise kann ein solcher Viewer mindestens die drei gängigsten Formate anzeigen: CF_TEXT, CF_BITMAP und CF_METAFILEPICT. Wenn ein Viewer nichts anzeigt, liegen die Daten in einem anderen Format vor, z.B. in einem Format, das spezifisch ist für das jeweilige Anwendungsprogramm.

Eine Zwischenablage-Viewer Kette ist die Verknüpfung von zwei oder mehr Formaten, die abhängig voneinander sind und gleichzeitig zur Anzeige angeboten werden. Aufgrund dieser Interdependenz (-Kette) können alle laufenden Anwendungen und Zwischenablage-Viewer auf die aktuelle Zwischenablage zugreifen.

Zwischenablage-Fenster

Ein Fenster eines Anwendungsprogramms fügt sich selbst in die Zwischenablage-Viewer- Kette ein, indem die Funktion SetClipboardViewer aufruft. Der Rückgabewert ist der Zugriff auf das nächste Fenster in der Kette. Um im ersten Fenster der Kette den Inhalt dr Zwischanablage abzurufen, muss die Funktion GetClipboardViewer verwendet werden.

Jedes Zwischenablage-Viewer-Fenster hält dadurch den Kontakt zum nächsten Fenster aufrecht, dass das System eine Nachricht an WM_DRAWCLIPBOARD sendet, sobald sich der Inhalt der Zwischenablage ändert. Nach der Aktualisierung seiner Anzeige gibt jedes Zwischenablage-Viewer-Fenster diese Meldung and das nächste Fenster in der Kette weiter.

Ein Zwischenablage-Viewer-Fenster wird aus der Zwischenablage-Viewer-Kette entfernt, indem die Funktion ChangeClipboardChain aufgerufen wird, was beim Schließen des Fensters passiert. Das System sendet dann die Nachricht WM_CHANGECBCHAIN an das erste Fenster in der Kette.

Anzeigeformate

Ein Anzeige-Format ist ein Clipboard-Format, das dazu verwendet wird, Informationen in einem Zwischenablage-Viewer-Fenster anzuzeigen. Ein Zwischenablage-Besitzer (also ein Anwendungsprogramm), der ein eigenes oder eingetragenes Format der Zwischenablage verwendet, muss Daten in einem Anzeige-Format anbieten, damit sie in einem Zwischenablage-Viewer-Fenster gesehen werden können. Solche Anzeige-Formate sind nur für die Anzeige bestimmt, nicht zum Einfügen in ein Dokument.

Die vier Anzeige-Formate sind: CF_DSPBITMAP, CF_DSPMETAFILEPICT, CF_DSPTEXT und CF_DSPENHMETAFILE. Diese Display-Formate werden in der gleichen Weise gerendert wie die Standard-Formate CF_BITMAP, CF_TEXT, CF_METAFILEPICT und CF_ENHMETAFILE.

Eigene Anzeige-Formate

Für einen Zwischenablage-Besitzer, der kein übliches Standard-Zwischenablage-Format verwendet, besteht eine Alternative zum Bereitstellen eines Anzeige-Formats darin, ein eigenes Anzeige-Format (CF_OWNERDISPLAY) zu verwenden.

Durch die Verwendung eigener Anzeige-Formate kann eine Zwischenablage-Eigentümer den Aufwand für das Rendering von Daten in einem zusätzlichen Format vermeiden. Das Zwischenablage-Viewer-Fenster sendet eine Meldung an den Zwischenablage-Besitzer, wenn sich der Inhalt des Fensters ändert.

Zwischenablage-Formate

Standard-Formate für die Zwischenablage

Die Zwischenablage-Formate, die durch das System vordefiniert sind, werden als Standard-Zwischenablage-Formate bezeichnet:

Constant/valueDescription
CF_BITMAP/2A handle to a bitmap (HBITMAP).
CF_DIB/8A memory object containing a BITMAPINFO structure followed by the bitmap bits.
CF_DIBV5/17A memory object containing a BITMAPV5HEADER structure followed by the bitmap color space information and the bitmap bits.
CF_DIF/5Software Arts' Data Interchange Format.
CF_DSPBITMAP/0x0082Bitmap display format associated with a private format. The hMem parameter must be a handle to data that can be displayed in bitmap format in lieu of the privately formatted data.
CF_DSPENHMETAFILE/0x008EEnhanced metafile display format associated with a private format. The hMem parameter must be a handle to data that can be displayed in enhanced metafile format in lieu of the privately formatted data.
CF_DSPMETAFILEPICT/0x0083Metafile-picture display format associated with a private format. The hMem parameter must be a handle to data that can be displayed in metafile-picture format in lieu of the privately formatted data.
CF_DSPTEXT/0x0081Text display format associated with a private format. The hMem parameter must be a handle to data that can be displayed in text format in lieu of the privately formatted data.
CF_ENHMETAFILE/14A handle to an enhanced metafile (HENHMETAFILE).
CF_GDIOBJFIRST/0x0300Start of a range of integer values for application-defined GDI object clipboard formats. The end of the range isCF_GDIOBJLAST.
Handles associated with clipboard formats in this range are not automatically deleted using the GlobalFree function when the clipboard is emptied. Also, when using values in this range, the hMem parameter is not a handle to a GDI object, but is a handle allocated by the GlobalAlloc function with the GMEM_MOVEABLE flag.
CF_GDIOBJLAST/0x03FFSee CF_GDIOBJFIRST.
CF_HDROP/15A handle to type HDROP that identifies a list of files. An application can retrieve information about the files by passing the handle to the DragQueryFile function.
CF_LOCALE/16The data is a handle to the locale identifier associated with text in the clipboard. When you close the clipboard, if it contains CF_TEXT data but no CF_LOCALE data, the system automatically sets the CF_LOCALE format to the current input language. You can use the CF_LOCALE format to associate a different locale with the clipboard text.
An application that pastes text from the clipboard can retrieve this format to determine which character set was used to generate the text.
Note that the clipboard does not support plain text in multiple character sets. To achieve this, use a formatted text data type such as RTF instead.
The system uses the code page associated with CF_LOCALE to implicitly convert from CF_TEXT toCF_UNICODETEXT. Therefore, the correct code page table is used for the conversion.
CF_METAFILEPICT/3Handle to a metafile picture format as defined by the METAFILEPICT structure. When passing a CF_METAFILEPICThandle by means of DDE, the application responsible for deleting hMem should also free the metafile referred to by the CF_METAFILEPICT handle.
CF_OEMTEXT/7Text format containing characters in the OEM character set. Each line ends with a carriage return/linefeed (CR-LF) combination. A null character signals the end of the data.
CF_OWNERDISPLAY/0x0080Owner-display format. The clipboard owner must display and update the clipboard viewer window, and receive theWM_ASKCBFORMATNAME, WM_HSCROLLCLIPBOARD, WM_PAINTCLIPBOARD, WM_SIZECLIPBOARD, andWM_VSCROLLCLIPBOARD messages. The hMem parameter must be NULL.
CF_PALETTE/9Handle to a color palette. Whenever an application places data in the clipboard that depends on or assumes a color palette, it should place the palette on the clipboard as well.
If the clipboard contains data in the CF_PALETTE (logical color palette) format, the application should use theSelectPalette and RealizePalette functions to realize (compare) any other data in the clipboard against that logical palette.
When displaying clipboard data, the clipboard always uses as its current palette any object on the clipboard that is in the CF_PALETTE format.
CF_PENDATA/10Data for the pen extensions to the Microsoft Windows for Pen Computing.
CF_PRIVATEFIRST/0x0200Start of a range of integer values for private clipboard formats. The range ends with CF_PRIVATELAST. Handles associated with private clipboard formats are not freed automatically; the clipboard owner must free such handles, typically in response to the WM_DESTROYCLIPBOARD message.
CF_PRIVATELAST/0x02FFSee CF_PRIVATEFIRST.
CF_RIFF/11Represents audio data more complex than can be represented in a CF_WAVE standard wave format.
CF_SYLK/4Microsoft Symbolic Link (SYLK) format.
CF_TEXT/1Text format. Each line ends with a carriage return/linefeed (CR-LF) combination. A null character signals the end of the data. Use this format for ANSI text.
CF_TIFF/6Tagged-image file format.
CF_UNICODETEXT/13Unicode text format. Each line ends with a carriage return/linefeed (CR-LF) combination. A null character signals the end of the data.
CF_WAVE/12Represents audio data in one of the standard wave formats, such as 11 kHz or 22 kHz PCM.

Angemeldete/eingetragene Zwischenablage-Formate

Viele Anwendungen arbeiten mit Daten, die nicht ohne Informationsverlust in ein Standard-Format der Zwischenablage übersetzt werden können. Diese Anwendungen können ihre eigenen Zwischenablage-Formate verwenden und im System anmelden. Solche Formate, die innerhalb einer Anwendung definiert werden, heißen angemeldete oder eingetragene Zwischenablage-Formate. Zum Beispiel könnte ein Textverarbeitungsprogramm formatierten Text in einem Standard-Text-Format an die Zwischenablage übergeben mit dem Ergebnis, dass die Formatierungsinformation verloren geht. Die Lösung wäre, ein neues Format der Zwischenablage, z.B. Rich Text Format (RTF) anzumelden.

Um ein neues Format der Zwischenablage anzumelden, verwenden Sie die Funktion RegisterClipboardFormat. Diese Funktion nimmt den Namen des Formats und gibt eine natürliche Zahl zurück, die das eingetragene Zwischenablage-Format repräsentiert. Um den Namen des angemeldeten Formats der Zwischenablage abzurufen, übergeben Sie die Zahl an die Funktion GetClipboardFormatName.

Wenn mehr als eine Anwendung ein Clipboard-Format mit exakt dem gleichen Namen anmeldet, wird das Format der Zwischenablage nur einmal registriert. Beide Aufrufe der Funktion RegisterClipboardFormat geben den gleichen Wert zurück. Auf diese Weise können zwei verschiedene Anwendungen Daten über das eingetragene Zwischenablage-Format austauschen.

Eigene (Spezial-)Formate für die Zwischenablage

Eine Anwendung kann ein eigenes Zwischenablageformat definieren, dessen Zahlen-Repräsentationswert zwischen CF_PRIVATEFIRST und CF_PRIVATELAST liegt. Ein solches eigenes Format muss nicht im System angemeldet werden.

Daten mit eigenen Zwischenablage-Formaten werden automatisch vom System wieder freigegeben. (Sie können also nur einmal eingesetzt werden.) Zwischenablage-Fenster, die eigene Formate verwenden, können mit der Meldung WM_DESTROYCLIPBOARD alle nicht mehr benötigten Zwischenablagedaten löschen .

Mehrere Formate gleichzeitig für die Zwischenablage

Ein Fenster kann gleichzeitig mehrere Clipboard-Objekte desselben Inhalts, aber in unterschiedlichen Formaten in der Zwischenablage platzieren. Um herauszufinden, wie viele Formate sich aktuell in der Zwischenablage befinden, rufen Sie die Funktion CountClipboardFormats auf.

Diejenigen Zwischenablage-Formate, die die meisten Informationen enthalten, sollten an oberster Stelle in der Zwischenablage abgelegt werden, danach sollten die Formate mit weniger Informationen kommen. Wenn ein Fenster Daten aus der Zwischenablage einfügt, ruft es in der Regel das Clipboard-Objekt auf, dessen Format es als erstes erkennt. Weil Zwischenablageformate in der Reihenfolge ihres Informationsgehalts in der Zwischenablage liegen, ist das erste erkannte Format auch das informationsträchtigste.

Angenommen, ein Benutzer kopiert formatierten Text aus einem Textverarbeitungs-Dokument. Das Programmfenster übergibt die Daten in folgender Reihenfolge an die Zwischenablage: 1. im eingetragenen Format RTF, 2. im informationsärmeren Standard-Text-Fromnat (CF_TEXT). Wird der Inhalt der Zwischenablage nun in ein anderes Fenster eingefügt, so ruft das Fenster Daten in dem Format ab, das die meisten Informationen trägt. Erkennt das Fenster RTF, so werden die entsprechenden Daten in das Dokument eingefügt. Andernfalls werden die Textdaten in das Dokument eingefügt und die Formatierungsinformation geht verloren.

Synthetisierte Formate für die Zwischenablage

Synthetisitierte Formate sind solche, die aus anderen Formaten konvertiert werden. Die Konvertierung kann durch das Betriebssystem oder das Anwendungsprogrqmm selbst vorgenommen werden. Windows kann die folgenden Formate konvertieren.

Clipboard FormatConversion Format
CF_BITMAPCF_DIB
CF_BITMAPCF_DIBV5
CF_DIBCF_BITMAP
CF_DIBCF_PALETTE
CF_DIBCF_DIBV5
CF_DIBV5CF_BITMAP
CF_DIBV5CF_DIB
CF_DIBV5CF_PALETTE
CF_ENHMETAFILECF_METAFILEPICT
CF_METAFILEPICTCF_ENHMETAFILE
CF_OEMTEXTCF_TEXT
CF_OEMTEXTCF_UNICODETEXT
CF_TEXTCF_OEMTEXT
CF_TEXTCF_UNICODETEXT
CF_UNICODETEXTCF_OEMTEXT
CF_UNICODETEXTCF_TEXT
windows/zwischenablage.txt · Zuletzt geändert: 2012/07/05 18:32 (Externe Bearbeitung)