# Zwischenablage

Die Zwischenablage (englisch Clipboard) ist ein Puffer, also ein Zwischenspeicher, für das kurzzeitige Speichern und Übertragen von Daten. Dieses Verfahren wird meist nur auf einem Computer zwischen Dokumenten oder Programmen angewandt. Betriebssysteme benutzen für die Interaktion mit der Zwischenablage die Technik Kopieren und Einfügen (Copy and Paste). Die meisten Programme greifen auf deren Schnittstellen für die Zwischenablage zu, wenn sie auf eine festgelegte Benutzereingabe, wie eine Tastenkombination oder eine Menüauswahl, reagieren. Ein Element in der Zwischenablage kann in verschiedenen Formaten vorgehalten werden. Jedes Programm bestimmt dabei, in welchen Variationen die Daten gespeichert werden. Das ist nützlich, da zum Zeitpunkt des Speicherns keine Rückschlüsse auf das Zielprogramm gezogen werden können.
Windows, Linux und MacOS nutzen für die Zwischenablage den Arbeitsspeicher und können standardmäßig nicht mehrere Elemente zwischenspeichern, da sie jeweils den vorherigen Inhalt überschreiben. Das Objekt in der Zwischenablage wird nach dem Einfügen nicht gelöscht, sondern weiter vorgehalten. Ein Neustart oder Ausschalten des Systems leert aber dennoch den Arbeitsspeicher und somit auch das gespeicherte Objekt. Die Verfahrensweise der Zwischenablage kann dabei zwischen Betriebssystemen und ihren Versionen variieren. Die Kernfunktionen der Zwischenablage können zudem durch Clipboard-Manager und Einstellungen verändert oder erweitert werden.
Die Interaktionstechnik Drag and Drop benutzt die Zwischenablage dagegen nicht, obwohl die Funktionalität Ähnlichkeiten mit der von Kopieren und Einfügen aufweist.

## Geschichte

Eine erste Form der Zwischenablage wurde von Pentti Kanerva im Texteditor TVEDIT implementiert. Die Software nutzte einen Zwischenspeicher für das Ausschneiden von Texten. Der Nutzer musste erst Zeichen auswählen und danach löschen. Danach konnte er diese an einer bestimmten Stelle wiederherstellen.
Seitdem ein Text an einer Stelle gelöscht und an einer anderen Stelle wieder eingefügt werden konnte, entspricht der Begriff „Löschen“ in diesem Zusammenhang nicht mehr der eigentlichen Bedeutung des Wortes. Larry Tesler benannte das Szenario deswegen 1973 in Ausschneiden, Kopieren, Einfügen (englisch cut, copy and paste) um. Außerdem definierte er den Begriff „clipboard“, was wörtlich übersetzt „Klemmbrett“ heißt, als Zwischenspeicher für diese Interaktionstechnik. Tesler war gleichzeitig auch einer der Entwickler des ersten PCs namens Apple Lisa, der diese Technologie ab Werk unterstützte.

## Datenformate

Die Zwischenablage unterstützt das Speichern von mehreren Typen des Datenobjekts zur selben Zeit, sodass komplexe Datenstrukturen ebenso abgelegt werden können. Diese reichen von Textformaten mittels Auszeichnungssprache, wie zum Beispiel RTF oder HTML, über eine Vielfalt von Bitmaps und Vektorgrafiken bis hin zu komplexen Varianten, wie Dateien und Verzeichnisse, Tabellen und Einträgen in Datenbanken. Das Ausschneiden von mehreren Zellen einer Tabelle und das darauffolgende Einfügen in eine andere Tabelle könnte beispielsweise die zugrunde liegenden Formeln, Datensätze und sogar automatische Übersetzungen der Referenzen innerhalb einer Zelle mit einfließen lassen. Das würde zum Beispiel dazu führen, dass nach einem Kopieren und Einfügen von Zellen, die von einer Summenfunktion benutzt werden, ein Programm den Inhalt dieser Funktion mit den neuen Referenzen aktualisiert.
Ein Programm kann Daten in vielen verschiedenen Formaten der Zwischenablage hinzufügen. Das können native, einfachere oder häufigere Datenformate sein, die eine höhere Chance haben, von unterschiedlichsten Programmen erkannt zu werden. Deshalb kann das Zielprogramm beim Einfügen der Zwischenablage das Format wählen, das am ehesten dem des Programmes entspricht, sodass nach Möglichkeit alle Originaldaten vorhanden bleiben.
Beispiel für Formate die in der Zwischenablage von Ubuntu gespeichert sind. :
| | Titel der englischen Version dieses Artikels (in Mozilla Firefox) | Python Script im Ordner downloads | Klemmbrett-Piktogramm der englischen Version dieses Artikels |
| available formats in clipboard | 'TIMESTAMP', 'TARGETS', 'MULTIPLE', 'SAVE_TARGETS', 'text/html', 'text/_moz_htmlcontext', 'text/_moz_htmlinfo', 'text/plain', 'COMPOUND_TEXT', 'text/x-moz-url-priv' | 'TIMESTAMP', 'TARGETS', 'MULTIPLE', 'x-special/gnome-copied-files', 'text/uri-list', 'text/plain', 'COMPOUND_TEXT', 'text/plain;charset=utf-8' | 'TIMESTAMP', 'TARGETS', 'MULTIPLE', 'SAVE_TARGETS', 'text/html', 'text/_moz_htmlinfo', 'text/_moz_htmlcontext', 'image/png', 'image/tiff', 'image/x-icon', 'image/x-ico', 'image/x-win-bitmap', 'image/jpeg', 'image/bmp', 'image/x-bmp', 'image/x-MS-bmp', 'application/x-qt-image' |
| TIMESTAMP | '\xdb\xdb\n\x00' | @\x07\x0f\x00 | '\xb0$\x1e\x00' |
| TARGETS | '\xb1\x01\x00\x00\xaf\x01\x00\x00\xb0\x01\x00\x00\xc6\x01\x00 \x00)\x02\x00\x00*\x02\x00\x00+\x02\x0 […] | '\xb1\x01\x00\x00\xaf\x01\x00\x00\xb0\x01\x00\x007\x02\x00 \x008\x02\x00\x00\x13\x01\x00\x00\xd7\x01 […] | '\xb1\x01\x00\x00\xaf\x01\x00\x00\xb0\x01\x00\x00\xc6 \x01\x00\x00)\x02\x00\x00+\x02\x00\x00*\x02\x0 […] |
| MULTIPLE | [empty] | [empty] | [empty] |
| SAVE TARGETS | [empty] | - | [empty] |
| text/html | '\xff\xfe<\x00h\x001\x00 \x00i\x00d\x00=\x00"\x00f\x00i\x00r\x00s \x00t\x00H\x00e\x00a\x00d\x00i\x00 […] | - | '\xff\xfe<\x00i\x00m\x00g\x00 \x00a\x00l\x00t\x00=\x00" \x00"\x00 \x00s\x00r\x00c\x00=\x00"\x00h\x00 […] |
| text/_moz_htmlcontext | '<\x00h\x00t\x00m\x00l\x00 \x00c\x00l\x00a\x00s\x00s\x00=\x00" \x00c\x00l\x00i\x00e\x00n\x00t\x00-\x […] | - | [empty] |
| text/_moz_htmlinfo | '0\x00,\x000\x00' | - | '0\x00,\x000\x00' |
| text/plain | 'Clipboard (computing)' | '/home/user/Downloads/show_clipboard.py' | - |
| COMPOUND_TEXT | 'Clipboard (computing)' | '/home/user/Downloads/show_clipboard.py' | - |
| text/x-moz-url-priv | 'h\x00t\x00t\x00p\x00s\x00:\x00/\x00/\x00e\x00n\x00.\x00w\x00i\x00k \x00i\x00p\x00e\x00d\x00i\x00a\x […] | - | - |
| x-special/gnome-copied-files | - | 'copy\nfile:///home/user/downloads/show_clipboard.py'// | - |
| text/uri-list | - | 'file:///home/user/downloads/show_clipboard.py\r\n'// | - |
| text/plain;charset=utf-8 | - | '/home/user/Downloads/show_clipboard.py' | - |
| image/png | - | - | '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xdc \x00\x00\x00\xf4\x08\x06\x00\x00\x00\xf0\xa5H\x […] |
| image/tiff | - | - | [empty] |
| image/x-icon, image/x-ico, image/x-win-bitmap | - | - | '\x00\x00\x01\x00\x01\x00\xdc\xf4\x00\x00\x01\x00 \x00 \x98a\x03\x00\x16\x00\x00\x00(\x00\x00\x00\xd […] |
| image/jpeg | - | - | '\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00 \x01\x00\x00\xff\xdb\x00C\x00\x08\x06\x06\ […] |
| image/bmp, image/x-bmp, image/x-MS-bmp | - | - | 'BMFu\x02\x00\x00\x00\x00\x006\x00\x00\x00(\x00\x00\x00 \xdc\x00\x00\x00\xf4\x00\x00\x00\x01\x00\x18 […] |
| application/x-qt-image | - | - | '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xdc\x00 \x00\x00\xf4\x08\x06\x00\x00\x00\xf0\xa5H\x […] |

## Sicherheit

Das Hijacking der Zwischenablage ist ein Angriff, der den Inhalt der Zwischenablage gegen einen bösartigen Inhalt wie eine mit Viren behaftete Webseite austauscht. Während einige Sicherheitslücken geschlossen wurden, kann über JavaScript und damit über jede Webseite das sogenannte „pastejacking“ weiterverwendet werden. Dylan Ayrey fand diese Lücke und stellt eine Webseite bereit, die zeigen soll, dass das System Aktionen ausführt, die der Nutzer gar nicht beabsichtigt.
2013 entdeckten Forscher ein Sicherheitsrisiko von Applikationen zur Passwortverwaltung auf Android-Geräten. Sie fanden heraus, dass bei 21 der beliebtesten dieser Apps Passwörter ausgelesen werden können. Das geschieht durch die Verwendung eines anderen Programmes und den Zugriff auf die Zwischenablage. Joe Siegrist sagte, dass dieser Angriff alle Programme des Betriebssystems Android betrifft. Das Fraunhofer-Institut SIT fand 2016 nochmals eine ähnliche Sicherheitslücke, die es ebenfalls ermöglichte, Passwörter aus der Zwischenablage zu stehlen.

## Zwischenablagen der Betriebssysteme
### Windows

Die Zwischenablage in Windows speichert einen Eintrag in 3 verschiedenen Formaten. Jeder Eintrag liegt in mindestens einem dieser Formate vor.
* Standardformate von Windows (z. B. CF_BITMAP, oder CF_UNICODETEXT),
* Registrierte Formate, die durch Programmen hinzugefügt werden (z. B. CF_HTML)
* Interne Formate von Programmen oder des Systems
Windows unterstützt außerdem das verzögerte Erstellen (englisch delayed rendering) der Formate eines zwischengespeicherten Datenobjekts. Das bedeutet, dass das Programm nur bei Bedarf ein Format generiert und in die Zwischenablage verschiebt. Falls also ein Programm zeitaufwändige Prozesse benötigt, um die Daten in ein spezielles Format aufzubereiten, können die lang andauernden Rechenoperationen mit dieser Funktionalität umgangen werden.
Bis einschließlich Windows XP kann auf die Zwischenablage mit Hilfe von clipbrd.exe zugegriffen werden. Dieses Programm erlaubt es dem Nutzer, die aktuelle Zwischenablage in einer CLP-Datei abzuspeichern. Darauf kann die Datei entweder im eigenen System oder per Übertragung innerhalb eines anderen Windowscomputer verwendet werden. Indem die CLP mittels clipbrd.exe in die Zwischenablage importiert wird, kann der Anwender den Inhalt an den gewünschten Ort des Zielsystems einfügen. Das ist nützlich, da die verschiedenen Formate gespeichert werden und somit auch für andere Nutzer eine funktionierende Variante bereithält.
Mit Windows 10 1809 erweiterte Microsoft die Möglichkeiten der Zwischenablage deutlich. Die Zwischenablage erhält einen Verlauf, der es ermöglicht, mehrere Objekte oder Textpassagen in die Zwischenablage zu übernehmen. Aus dem Verlauf kann dann beim Einfügen das gewünschte Objekte ausgewählt werden. Zusätzlich kann der Verlauf der Zwischenablage mit der Cloud (automatisch oder manuell) synchronisiert werden.
Außerdem ist die Zwischenablage über PowerShell erreichbar:
Daten können auch über die Eingabeaufforderung gespeichert werden:

### macOS

Auch macOS speichert einen Eintrag in verschiedenen Formaten in die Zwischenablage.
Dessen Inhalt kann über das Menü der Schaltfläche Bearbeiten des Finders und die Auswahl des Eintrags „Zwischenablage einblenden“ angezeigt werden. Außerdem kann die Zwischenablage geräteübergreifend mit derselben Apple-ID benutzt werden, solange sie WLAN, Bluetooth und Handoff aktiviert haben. So kann ein kopierter Text auf einem Gerät, auf einem Zweiten eingefügt werden.
Mit Hilfe folgender Kommandos kann die Zwischenablage benutzt werden:

### X Window System

Das X Window System, das vorwiegend in Unix oder Linux basierten Betriebssystemen eingesetzt wird, stellt drei Zwischenablagen namens „PRIMARY“, „SECONDARY“ und „CLIPBOARD“ bereit.
Die Interaktion mit diesen ist nicht standardisiert. Dennoch benutzen die meisten modernen Bibliotheken und Desktopumgebungen, wie GNOME oder KDE, eine weit verbreitete Konvention, die durch freedesktop.org spezifiziert wurde.
„CLIPBOARD“ wird identisch wie das Pendant aus Windows benutzt. Der Unterschied zu den bereits erwähnten Systemen ist, dass die Daten nicht extra in der Zwischenablage abgelegt werden, sondern nur deren Referenz. Das Programm übernimmt den Besitz der Selektion und kommuniziert das dem X Server. Sobald ein Einfügen erfolgt, wird das Datenobjekt und seine verfügbaren Formate vom Programm angefordert und abhängig davon eingefügt.
„PRIMARY“ hingegen, ist ein X11 spezifischer Mechanismus. Das bedeutet, dass die Selektion direkt ein Kopieren der Daten zur Folge hat und über die dritte beziehungsweise mittlere Maustaste eingefügt wird. Dieser Prozess ist komplett unabhängig von der Variante „CLIPBOARD“ und verändert deshalb nicht dessen Inhalt.
„SECONDARY“ wurde als Alternative zu „PRIMARY“ geplant, wird aber meist nicht verwendet.
Zwei Kommandos ermöglichen den Zugriff auf das „CLIPBOARD“:
Auf der Linux-Konsole bietet GPM (General Purpose Mouse Manager) eine ähnliche Funktion, allerdings nur für Text. Das Einfügen erfolgt auf der Linuxkonsole mit der Rolltaste der Maus beziehungsweise der mittleren Maustaste.

### AmigaOS

Das Betriebssystem AmigaOS verwendet 256 Einheiten für die Zwischenablage, sodass ein Nutzer mehrere Zwischenablagen zur gleichen Zeit nutzen kann. Diese werden in einem speziellen Speicherplatz aufbewahrt, der durch die AmigaDOS Zuweisung CLIPS: definiert ist. Durch das Containerformat IFF können beliebige Datentypen in einer Zwischenablage gemischt werden.

### Android

Android stellt ein Framework bereit, das ein Objekt zwischenspeichert und systemweit verfügbar macht. Während einfacher Text direkt gespeichert wird, werden komplexe Datenstrukturen als Referenz abgelegt. Das Objekt gehört zu einer von drei verschiedenen Arten:
* Zeichenkette
* URI Objekt
* Intent
Der Inhalt des Clipboards kann nur durch Programme oder das System verwendet werden.
Entwickler können die Klasse ClipboardManager benutzen, um das Kopieren und Einfügen von Daten zu steuern.

### iOS

Die Zwischenablage in iOS hat den Namen „Pasteboard“ und hat eine ähnliche Funktionsweise wie das Pendant in macOS. Applikationen können weitere Pasteboards mit Hilfe von Instanzen der UIPasteboard Klasse erstellen. Diese können privat oder öffentlich gesetzt werden. Eine Instanz kann einen oder mehrere Einträge mit verschiedenen Formatierungen, die durch Uniform Type Identifiers festgelegt wurden, enthalten.
Ähnlich zu Android können die Daten der Zwischenablage nicht über die GUI des Betriebssystems erreicht werden. Nur Programm und das System selbst können auf diese zugreifen.

## APIs

Für viele Programmiersprachen gibt es Bibliotheken und APIs, die eine einfache Zugriffsmöglichkeit auf die Zwischenablage bereitstellen.

### JavaScript

JavaScript stellt eine Schnittstelle über ein Event (ClipboardEvent) bereit, die ein Lesen und Setzen von Daten erlaubt. Das wird aber nicht von jedem Browser unterstützt, da eine Manipulation dieses Speichers ein Sicherheitsrisiko bedeuten kann.

### Qt

Das Framework für plattformübergreifende Benutzerschnittstellen Qt wird unter anderem von Python und C++ benutzt. Qt enthält durch die Klasse QClipboard, eine Möglichkeit auf die verschiedenen Zwischenablagen Schnittstellen der Betriebssysteme zuzugreifen. Dadurch können gewöhnliche Datentypen in der Zwischenablage über Funktionen erreicht werden. Jedes gespeicherte Element wird mittels MIME typisiert und kann somit ausgelesen sowie in einen bestimmten Datentyp gespeichert werden.

## Erweiterungen der Zwischenablage

Clipboard-Manager fügen zu der bereits integrierten Zwischenablage weitere Funktionen hinzu, sodass der Nutzer den Speicher verändern kann. Viele Programme dieser Art können mehrere Einträge zwischenspeichern und einfügen. Dabei kann der letzte Eintrag trotzdem wie üblich benutzt werden. Des Weiteren gibt es oft die Möglichkeit, den Verlauf der Speichereinträge zu sehen, zu selektieren, zu editieren, in andere Formate zu konvertieren und zu durchsuchen.
Da die meisten Betriebssysteme (Windows, macOS, Linux, X11, Android, iOS) den Inhalt der Zwischenablage nicht in den Festspeicher ablegen, wird dieser gelöscht, sobald sich der Nutzer abmeldet oder das System neustartet. Deswegen implementieren Clipboard-Manager sowie Programme wie der Texteditor Emacs häufig eine persistente Speicherung.