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

Global $iMemo

_Main()

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

	; Создаёт 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
				_ClipBoard_SetData("Текст для буфера обмена")
			Case $btn_GetData
				; Открывает буфер обмена
				If _ClipBoard_Open($hGUI) Then
					; Читает текст буфера обмена
					$hMemory = _ClipBoard_GetDataEx($CF_TEXT)
					If $hMemory = 0 Then _WinAPI_ShowError("Ошибка функции _ClipBoard_GetDataEx")
					$tData = DllStructCreate("char Text[8192]", $hMemory)
					MemoWrite(DllStructGetData($tData, "Text"))
					; Закрывает буфер обмена
					_ClipBoard_Close()
				Else
					_WinAPI_ShowError("Ошибка функции _ClipBoard_Open")
				EndIf
		EndSwitch
	WEnd

EndFunc   ;==>_Main

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