Clipboard / ClipboardAll

Clipboard ist eine interne Variable, die den aktuellen Inhalt der Windows-Zwischenablage enthält, sofern dieser als Text ausgegeben werden kann. ClipboardAll enthält dagegen alles, was sich in der Zwischenablage befindet, also auch Bilder und Formatierungen.

[v1.1.35+]: A_Clipboard ist ein Alias von Clipboard.

Jede Textzeile in Clipboard endet normalerweise mit einem CR-LF-Paar (`r`n). Dateien (die z.B. mit Strg+C kopiert wurden) werden als Text betrachtet: Jedes Mal, wenn auf Clipboard zugegriffen wird, werden sie automatisch in ihre Dateinamen umgewandelt (mit vollständigem Pfad). Um die Dateien einzeln zu durchlaufen, gehen Sie wie folgt vor:

Loop, parse, clipboard, `n, `r
{
    MsgBox, 4, , Datei Nr. %A_Index% ist %A_LoopField%.`n`nWeiter?
    IfMsgBox, No, break
}

Mit dem Sort-Befehl können die Dateinamen alphabetisch sortiert werden. Um die Dateinamen aus der Zwischenablage in eine Datei zu schreiben, verwenden Sie FileAppend, %clipboard%`r`n, C:\Meine Datei.txt. Mit #ClipboardTimeout können Sie festlegen, wie lange das Skript versuchen soll, die Zwischenablage zu öffnen (z.B. wenn die Zwischenablage von einer anderen Anwendung blockiert wird).

Einfache Beispiele:
clipboard := "mein Text"   ; Zwischenablage mit neuem Inhalt ersetzen.
clipboard := ""   ; Zwischenablage leeren.
clipboard := clipboard   ; Kopierte Dateien, HTML oder andere formatierte Texte in Klartext umwandeln.
clipboard := clipboard " angefügter Text."   ; Etwas Text an die Zwischenablage anfügen.
StringReplace, clipboard, clipboard, ABC, DEF, All   ; Alle Vorkommen von ABC mit DEF ersetzen (inkl. Umwandlung der Zwischenablage in Klartext).

Mit ClipWait die Zuverlässigkeit des Skripts erhöhen:

clipboard := ""  ; Für ClipWait leer machen.
Send ^c
ClipWait  ; Warten, bis die Zwischenablage Text enthält.
MsgBox STRG+C hat den folgenden Inhalt in die Zwischenablage kopiert:`n`n%clipboard%

ClipboardAll (Alles in der Zwischenablage speichern und wiederherstellen)

ClipboardAll enthält alles, was sich in der Zwischenablage befindet, wie Bilder und Formatierungen. Diese Variable wird häufig verwendet, um den aktuellen Inhalt der Zwischenablage zu sichern, damit die Zwischenablage vorübergehend für eine andere Operation verwendet werden kann. Nach Abschluss der Operation kann der ursprüngliche Inhalt der Zwischenablage wie folgt wiederhergestellt werden:

ClipSicherung := ClipboardAll   ; Zwischenablage in eine beliebige Variable speichern.
; ... hier die Zwischenablage für etwas anderes verwenden, z.B. Unicode-Text mit Transform Unicode einfügen ...
Clipboard := ClipSicherung   ; Originale Zwischenablage wiederherstellen. Beachten Sie die Verwendung von Clipboard (nicht ClipboardAll).
ClipSicherung := ""   ; Speicher freigeben, falls die Zwischenablage sehr groß war.

ClipboardAll kann auch in eine Datei gespeichert werden (in diesem Modus überschreibt FileAppend immer die vorhandene Datei):

FileAppend, %ClipboardAll%, C:\Firmenlogo.clip ; Die Dateiendung ist egal.

Um die Datei später wieder in die Zwischenablage (oder in eine Variable) zu laden, gehen Sie wie folgt vor:

FileRead, Clipboard, *c C:\Firmenlogo.clip ; Beachten Sie die Verwendung von *c, das vor dem Dateinamen stehen muss.

Einschränkungen

Es gibt einige Einschränkungen bei der direkten Verwendung von ClipboardAll:

Eine Variable, die binäre Daten aus der Zwischenablage enthält, kann wie folgt verwendet werden:

Es gibt weitere Einschränkungen:

Hinweise

Wenn ClipboardAll nicht in der Lage ist, bestimmte Datenobjekte (Formate) aus der Zwischenablage abzurufen, werden diese übersprungen und der Rest wird gespeichert.

Mit ClipWait kann festgestellt werden, wann die Zwischenablage Daten enthält (optional auch Nicht-Text-Daten).

StrLen() kann verwendet werden, um die Gesamtgröße einer Variable zu ermitteln, der ClipboardAll zugewiesen wurde. Um die Größe (in Bytes) in den Unicode-Versionen von AutoHotkey abzurufen, muss die Länge mit 2 multipliziert werden. A_IsUnicode kann wie folgt verwendet werden, um ANSI- und Unicode-Versionen zu unterstützen: Größe := StrLen(ClipSicherung) * (A_IsUnicode ? 2 : 1).

Variablen, denen ClipboardAll zugewiesen wurde, können mittels If[Not]Equal, If Var1 = %Var2% oder If Var1 != %Var2% miteinander verglichen werden (aber nicht direkt mit ClipboardAll). Im folgenden Beispiel wird zunächst die Länge jeder Variable überprüft. Wenn das nicht für die Feststellung ausreicht, wird der Inhalt verglichen:

if ClipSicherung1 != %ClipSicherung2%   ; Muss eine altmodische IF-Anweisung sein, kein Ausdruck.
    MsgBox Die beiden gesicherten Zwischenablagen sind unterschiedlich.

Das Speichern von ClipboardAll in eine Variable wird nicht durch das Speicherlimit von #MaxMem beeinflusst.

Eine gespeicherte Zwischenablagedatei besteht intern aus drei Elementen: Die ersten 4 Bytes enthalten den Formattyp, die nächsten 4 Bytes (wenn 32-Bit) oder 8 Bytes (wenn 64-Bit) die Datenblockgröße und der Rest den Datenblock des Formats. Wenn die Zwischenablage mehr als ein Format enthält (was fast immer der Fall ist), werden diese drei Elemente wiederholt, bis alle Formate enthalten sind. Die Datei endet mit einem vier Byte großen Formattyp von 0.

Bekannte Einschränkung: Wenn ClipboardAll abgerufen wird, während sich Zellen aus Microsoft Excel 2002/2003 (und evtl. anderen Versionen) in der Zwischenablage befinden, zeigt Excel möglicherweise ein "Keine Drucker"-Dialogfenster an. In neueren Versionen (z.B. 2007) ist diese Einschränkung nicht mehr reproduzierbar.

Zwischenablageprogramme, die mit AutoHotkey programmiert wurden:

OnClipboardChange

Skripte können mit OnClipboardChange Änderungen in der Zwischenablage erkennen.