Funktionsreferenz

_ClipBoard_SetDataEx

Speichert Daten in der Zwischenablage im angegebenen Format

#Include <Clipboard.au3>
_ClipBoard_SetDataEx(ByRef $hMemory [, $iFormat = 1])

 

Parameter

$hMemory Handle zu den Daten des angegebenen Format's. Dieser Parameter kann NULL sein und gibt an, dass das Fenster die Daten im angegebenen Format auf Abruf zur Verfügung stellt (rendert). Wenn ein Fenster das rendering verzögert, muss es die $WM_RENDERFORMAT und $WM_RENDERALLFORMATS Nachrichten verarbeiten. Bei erfolgreichem Durchlauf der Funktion, besitzt das System das Objekt, identifizierend über den $hMemory Parameter. Das Programm mag nicht in die Daten schreiben können oder es freigeben, aber es kann sie sperren und von ihnen lesen bis _ClipBoard_Close aufgerufen wird.
Der Speicher muss entsperrt sein, bevor die Zwischenablage geschlossen wird. Falls der $hMemory Parameter ein Speicherobjekt identifiziert, muss dem Objekt Speicher mit dem $GMEM_MOVEABLE-Flag zugewiesen werden.
$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: Das Handle zu den Daten
Fehler: 0

 

Bemerkungen

Der $iFormat Parameter kann ein registriertes Zwischendatei Format (registered clipboard format) identifizieren, oder es kann eines der Standardformate sein.
Falls das Programm diese Funktion als Reaktion auf $WM_RENDERFORMAT oder $WM_RENDERALLFORMATS aufrufen, sollte das Handle nach Aufruf nicht mehr genutzt werden.
Sollte ein Programm _ClipBoard_Open mit einem NULL-Handle aufrufen, setzt _ClipBoard_Empty den Eigentümer der Zwischendatei auf NULL; dies verursacht ein Verfehlen der Funktion.

 

Verwandte Funktionen

_ClipBoard_Empty, _ClipBoard_GetData, _ClipBoard_Open, _ClipBoard_SetData

 

Siehe auch

Suche in der MSDN Bibliothek nach SetClipboardData

 

Beispiel


#include <GuiConstantsEx.au3>
#include <ClipBoard.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>

Opt('MustDeclareVars', 1)

Global $iMemo

_Main()

Func _Main()
    Local $hGUI, $btn_SetData, $btn_GetData, $hMemory, $hLock, $tData, $sData, $iSize

    ; Erstellt eine GUI
    $hGUI = GUICreate("Zwischenablage", 600, 450)
    $iMemo = GUICtrlCreateEdit("", 2, 2, 596, 396, $WS_VSCROLL)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
    $btn_SetData = GUICtrlCreateButton("Schreibt Daten in die Zwischenablage", 50, 410, 220, 30)
    $btn_GetData = GUICtrlCreateButton("Holt Daten aus der Zwischenablage", 300, 410, 220, 30)
    GUISetState()

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $btn_SetData
                ; Zwischenablage öffnen
                If Not _ClipBoard_Open(0) Then _WinAPI_ShowError("_ClipBoard_Open failed")

                ; Zwischenablage leeren
                If Not _ClipBoard_Empty() Then _WinAPI_ShowError("_ClipBoard_Empty fehlgeschlagen!")

                ; Erzeugt globalen Pufferspeicher (zeigt, warum _ClipBoard_SetData VIEL einfacher zu benutzen ist!)
                $sData = "Ein freundliches Hallo von AutoIt"
                $iSize = StringLen($sData) + 1
                $hMemory = _MemGlobalAlloc($iSize, $GHND)
                If $hMemory = 0 Then _WinAPI_ShowError("_Mem_GlobalAlloc fehlgeschlagen!")
                $hLock = _MemGlobalLock($hMemory)
                If $hLock = 0 Then _WinAPI_ShowError("_Mem_GlobalLock fehlgeschlagen!")
                $tData = DllStructCreate("char Text[" & $iSize & "]", $hLock)
                DllStructSetData($tData, "Text", $sData)
                _MemGlobalUnlock($hMemory)

                ; Schreibt Text in die Zwischenablage
                If Not _ClipBoard_SetDataEx($hMemory, $CF_TEXT) Then _WinAPI_ShowError("_ClipBoard_SetDataEx fehlgeschlagen!")

                ; Zwischenablage schließen
                _ClipBoard_Close()
            Case $btn_GetData
                MemoWrite(_ClipBoard_GetData())
        EndSwitch
    WEnd

EndFunc   ;==>_Main

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