Функция _ClipBoard_SetDataEx

         Описание функции


_ClipBoard_SetDataEx

Помещает данные в буфер обмена в указанном формате

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

Параметры

$hMemory Дескриптор данных в указанном формате. Этот параметр может быть NULL, это означает, что окно предоставляет данные в заданном формате буфера обмена после запроса. Если окно задерживает его представление, оно должно обработать сообщения $WM_RENDERFORMAT и $WM_RENDERALLFORMATS. Если функция выполнена успешно, то система становится владельцем объекта идентифицирующегося параметром $hMemory. Приложение не может записать или освободить данные после того, как система стала владельцем, но может заблокировать и прочитать из данных пока не будет вызвана функция _ClipBoard_Close. Память должна быть разблокирована до закрытия буфера обмена. Если параметр $hMemory идентифицирует объект в памяти, то объект должен быть помещен, используя функцию с флагом $GMEM_MOVEABLE.
$iFormat [необязательный] Указывает формат буфера обмена:
    $CF_TEXT - Текстовый формат
    $CF_BITMAP - Дескриптор растрового рисунка (HBITMAP)
    $CF_METAFILEPICT - Дескриптор метафайла рисунка (METAFILEPICT)
    $CF_SYLK - Формат Символической Связи Microsoft (SYLK)
    $CF_DIF - Формат обмена данными программы Arts'
    $CF_TIFF - Формат файла тегированного изображения
    $CF_OEMTEXT - Текстовый формат, содержащий символы в OEM наборе символов
    $CF_DIB - Структура BITMAPINFO, сопровождаемая растровыми битами
    $CF_PALETTE - Дескриптор цветовой палитры
    $CF_PENDATA - Данные для пера для Pen Computing (Компьютерного пера).
    $CF_RIFF - Звуковые данные в формате RIFF
    $CF_WAVE - Звуковые данные в формате WAVE
    $CF_UNICODETEXT - Текстовый формат в юникоде
    $CF_ENHMETAFILE - Дескриптор улучшенного метафайла (HENHMETAFILE)
    $CF_HDROP - Дескриптор типа HDROP, идентифицирующий список файлов
    $CF_LOCALE - Дескриптор локального идентификатора, связанного с текстом в буфере обмена
    $CF_DIBV5 - Структура BITMAPV5HEADER, сопровождаемая растровыми цветами и растровыми битами
    $CF_OWNERDISPLAY - Собственный формат отображения данных
    $CF_DSPTEXT - Формат отображения текста, связанный с собственным форматом
    $CF_DSPBITMAP - Растровый формат отображения, связанный с собственным форматом
    $CF_DSPMETAFILEPICT - Формат отображения данных метафайла-картинки, связанного с собственным форматом
    $CF_DSPENHMETAFILE - Формат отображения улучшенного метафайла связанного с собственным форматом

Возвращаемое значение

Успех:Возвращает дескриптор данных
Ошибка:Возвращает 0

Примечания

Параметр $iFormat может идентифицировать зарегистрированный формат буфера обмена или один из стандартных форматов буфера обмена. Если приложение вызывает эту функцию в ответ на $WM_RENDERFORMAT или $WM_RENDERALLFORMATS, то приложение не должно использовать дескриптор после вызова этой функции. Если приложение вызывает _ClipBoard_Open с дескриптором равным NULL, то _ClipBoard_Empty устанавливает владельца буфера обмена в NULL; это вызывает сбой этой функции.

См. также

_ClipBoard_Empty, _ClipBoard_GetData, _ClipBoard_Open, _ClipBoard_SetData

См. также

Искать SetClipboardData в библиотеке MSDN

Пример

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

Global $iMemo

_Main()

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

    ; Создаёт GUI
    $hGUI = GUICreate("Clipboard", 600, 450)
    $iMemo = GUICtrlCreateEdit("", 2, 2, 596, 396, $WS_VSCROLL)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
    $btn_SetData = GUICtrlCreateButton("Вставить в буфер обмена", 120, 410, 160, 30)
    $btn_GetData = GUICtrlCreateButton("Получить из буфера обмена", 320, 410, 160, 30)
    GUISetState()

    ; Цикл выполняется, пока окно не будет закрыто
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
            Case $btn_SetData
                ; Открывает буфер обмена
                If _ClipBoard_Open(0) Then

                    ; Очищает буфер обмена
                    If _ClipBoard_Empty() Then

                        ; Создаёт буфер в памяти (показывает, насколько использование _ClipBoard_SetData гораздо проще!)
                        $sData = "Приветствие от AutoIt"
                        $iSize = StringLen($sData) + 1
                        $hMemory = _MemGlobalAlloc($iSize, $GHND)
                        If $hMemory <> 0 Then
                            $hLock = _MemGlobalLock($hMemory)
                            If $hLock = 0 Then _WinAPI_ShowError("Ошибка функции _Mem_GlobalLock")
                            $tData = DllStructCreate("char Text[" & $iSize & "]", $hLock)
                            DllStructSetData($tData, "Text", $sData)
                            _MemGlobalUnlock($hMemory)

                            ; Помещает текст в буфер обмена
                            If Not _ClipBoard_SetDataEx($hMemory, $CF_TEXT) Then _WinAPI_ShowError("Ошибка функции _ClipBoard_SetDataEx")
                        Else
                            _WinAPI_ShowError("Ошибка функции _Mem_GlobalAlloc")
                        EndIf

                        ; Закрывает буфер обмена
                        _ClipBoard_Close()
                    Else
                        ; Закрывает буфер обмена
                        _ClipBoard_Close()
                        _WinAPI_ShowError("Ошибка функции _ClipBoard_Empty")
                    EndIf
                Else
                    _WinAPI_ShowError("Ошибка функции _ClipBoard_Open")
                EndIf

            Case $btn_GetData
                MemoWrite(_ClipBoard_GetData())
        EndSwitch
    WEnd

EndFunc   ;==>_Main

; Записывает строку в элемент для заметок
Func MemoWrite($sMessage = "")
    GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
EndFunc   ;==>MemoWrite