Funktionreferenz


_ClipBoard_GetDataEx

Beschreibung anzeigen in

Ruft Daten eines bestimmten Format's aus der Zwischenablage ab

#include <Clipboard.au3>
_ClipBoard_GetDataEx ( [$iFormat = 1] )

Parameter

$iFormat [optional] Legt ein Format für die Zwischenablage fest:
$CF_TEXT - Textformat ($iFormat = 1)
$CF_BITMAP - Handle zu einer Bitmap (HBITMAP) ($iFormat = 2)
$CF_METAFILEPICT - Handle zu einem Bild im Format der Zwischendateien (Win16) (METAFILEPICT) ($iFormat = 3)
$CF_SYLK - Microsoft Symbolic Link (SYLK) Format ($iFormat = 4)
$CF_DIF - Software Arts' Data Interchange Format ($iFormat = 5)
$CF_TIFF - Tagged Image File Format ($iFormat = 6)
$CF_OEMTEXT - Textformat mit Zeichen im OEM-Zeichensatz ($iFormat = 7)
$CF_DIB - BITMAPINFO-Struktur gefolgt von den Bitmap Bits ($iFormat = 8)
$CF_PALETTE - Ein (direkter) Handle zu einer Farbpalette, die sich üblicherweise auf ein geräteabhängiges Bitmap (CF_BITMAP) bezieht, d.h. dessen "echte" Farbe festlegen ($iFormat = 9)
$CF_PENDATA - für die Erweiterungen der (mittlerweile durch CE ersetzten) Pen-Variante von Windows ($iFormat = 10)
$CF_RIFF - Audiodateien im RIFF-Format ($iFormat = 11)
$CF_WAVE - Audiodateien im WAVE-Format ($iFormat = 12)
$CF_UNICODETEXT - Unicode-Textformat ($iFormat = 13)
$CF_ENHMETAFILE - Handle zu einer Zwischendatei im neuen "erweiterten" Format (Win32) (HENHMETAFILE) ($iFormat = 14)
$CF_HDROP - Handle zu einer Liste von Dateinamen für "Drag & Drop"-Operationen ($iFormat = 15)
$CF_LOCALE - ist eine zusätzliche Information für ANSI-Texte (CF_TEXT) und gibt an, auf welche landessprachliche Variante sich die Zeichencodes beziehen ($iFormat = 16)
$CF_DIBV5 - ein Speicherobjekt, das eine BITMAPV5HEADER-Struktur gefolgt von der Bitmap-Farbe und den Bitmap-Bits enthält ($iFormat = 17)
$CF_OWNERDISPLAY - Owner Display Format ($iFormat = 0x0080)
$CF_DSPTEXT - Text, dessen Anzeigeformat mit eigenem (private) Format verbunden ist (CF_PRIVATEFIRST, CF_PRIVATELAST) ($iFormat = 0x0081)
$CF_DSPBITMAP - Bitmap, dessen Anzeigeformat mit eigenem (private) Format verbunden ist (CF_PRIVATEFIRST, CF_PRIVATELAST) ($iFormat = 0x0082)
$CF_DSPMETAFILEPICT - Zwischendatei, dessen Anzeigeformat mit eigenem (private) Format verbunden ist (CF_PRIVATEFIRST, CF_PRIVATELAST) ($iFormat = 0x0083)
$CF_DSPENHMETAFILE - Erweiterte Zwischendatei, dessen Anzeigeformat mit eigenem (private) Format verbunden ist (CF_PRIVATEFIRST, CF_PRIVATELAST) ($iFormat = 0x008E)

Rückgabewert

Erfolg: Handle zu einem Objekt aus der Zwischendatei im angegebenen Format
Fehler: 0

Bemerkungen

Falls die in der Zwischenablage gespeicherten Daten nicht das bei _ClipBoard_GetData() angegebene Format haben, liefert diese Funktion den Wert NULL anstelle eines Handles zurück. Das sollte auf jeden Fall geprüft und die Zwischenablage mit _ClipBoard_Close geschlossen werden.
Der zurückgegebene Handle ist nur solange gültig, bis _ClipBoard_Close das nächste mal aufgerufen wird und gehört in diesem Moment auch nicht zum Programm (Freigabe und Änderungen der zugeordneten Daten des Handles sind dann nicht möglich).
Das Handle muss vom Programm weder freigegeben, noch im Speicher belassen (locked) werden.
Das Programm darf/muss das Handle nicht nach einem Aufruf von _ClipBoard_Empty() oder _ClipBoard_Close(), oder nach Aufruf der Funktion _ClipBoard_SetData() mit demselben Datenformat.

Verwandte Funktionen

_ClipBoard_GetData, _ClipBoard_SetData

Siehe auch

Suche nach GetClipboardData in der MSDN Bibliothek.

Beispiel

Besipiel 1 verwendet _ClipBoard_SetData()

#include <Clipboard.au3>
#include <GUIConstantsEx.au3>
#include <WinAPIError.au3>
#include <WindowsConstants.au3>

Global $g_idMemo

Example()

Func Example()
    ; Erstellt eine GUI
    Local $hGUI = GUICreate("Zwischenablage: Setzt und ermittelt DataEx (v" & @AutoItVersion & ")", 600, 450)
    $g_idMemo = GUICtrlCreateEdit("", 2, 2, 596, 396, $WS_VSCROLL)
    GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New")
    Local $id_SetData = GUICtrlCreateButton("Schreibt Daten in die Zwischenablage", 50, 410, 220, 30)
    Local $id_GetData = GUICtrlCreateButton("Holt Daten aus der Zwischenablage", 300, 410, 220, 30)
    GUISetState(@SW_SHOW)

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst.
    Local $hMemory, $tData
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $id_SetData
                _ClipBoard_SetData("ClipBoard Testdaten")
            Case $id_GetData
                ; Öffnet die Zwischenablage
                If _ClipBoard_Open($hGUI) Then

                    ; Liest Text aus der Zwischenablage
                    $hMemory = _ClipBoard_GetDataEx($CF_TEXT)
                    If $hMemory = 0 Then _WinAPI_ShowError("_ClipBoard_GetDataEx fehlgeschlagen!")
                    $tData = DllStructCreate("char Text[8192]", $hMemory)
                    MemoWrite(DllStructGetData($tData, "Text"))

                    ; Schließt die Zwischenablage
                    _ClipBoard_Close()
                Else
                    _WinAPI_ShowError("_ClipBoard_Open fehlgeschlagen!")
                EndIf
        EndSwitch
    WEnd
EndFunc   ;==>Example

; Schreibt eine Nachricht in das Memo
Func MemoWrite($sMessage = "")
    GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1)
EndFunc   ;==>MemoWrite

Example 2 use _ClipBoard_GetData()

#include <Clipboard.au3>
#include <GUIConstantsEx.au3>
#include <Memory.au3>
#include <WinAPIError.au3>
#include <WindowsConstants.au3>

Global $g_idMemo

Example()

Func Example()
    ; Create GUI
    GUICreate("Clipboard Get/Set DataEx (v" & @AutoItVersion & ")", 600, 450)
    $g_idMemo = GUICtrlCreateEdit("", 2, 2, 596, 396, $WS_VSCROLL)
    GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New")
    Local $id_SetData = GUICtrlCreateButton("Set ClipBoard Data", 150, 410, 120, 30)
    Local $id_GetData = GUICtrlCreateButton("Get ClipBoard Data", 300, 410, 120, 30)
    GUISetState(@SW_SHOW)

    ; Loop until the user exits.
    Local $hMemory, $hLock, $tData, $sData, $iSize
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $id_SetData
                ; Open clipboard
                If _ClipBoard_Open(0) Then

                    ; Empty clipboard
                    If _ClipBoard_Empty() Then

                        ; Create global memory buffer (show why using _ClipBoard_SetData is MUCH easier!)
                        $sData = "Hello from AutoIt"
                        $iSize = StringLen($sData) + 1
                        $hMemory = _MemGlobalAlloc($iSize, $GHND)
                        If $hMemory <> 0 Then
                            $hLock = _MemGlobalLock($hMemory)
                            If $hLock = 0 Then _WinAPI_ShowError("_Mem_GlobalLock failed")
                            $tData = DllStructCreate("char Text[" & $iSize & "]", $hLock)
                            DllStructSetData($tData, "Text", $sData)
                            _MemGlobalUnlock($hMemory)

                            ; Write clipboard text
                            If Not _ClipBoard_SetDataEx($hMemory, $CF_TEXT) Then _WinAPI_ShowError("_ClipBoard_SetDataEx failed")
                        Else
                            _WinAPI_ShowError("_Mem_GlobalAlloc failed")
                        EndIf

                        ; Close clipboard
                        _ClipBoard_Close()
                    Else
                        ; Close clipboard
                        _ClipBoard_Close()
                        _WinAPI_ShowError("_ClipBoard_Empty failed")
                    EndIf
                Else
                    _WinAPI_ShowError("_ClipBoard_Open failed")
                EndIf

            Case $id_GetData
                MemoWrite(_ClipBoard_GetData())
        EndSwitch
    WEnd
EndFunc   ;==>Example

; Write message to memo
Func MemoWrite($sMessage = "")
    GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1)
EndFunc   ;==>MemoWrite