#include <Clipboard.au3>
Global $sCB_File = @ScriptDir & '\ClipBoard.ini'
Global $hGUI = GUICreate('')
Global $iFormat = 0
Global $aSects = IniReadSectionNames($sCB_File)
Global $iSect = (IsArray($aSects) ? $aSects[0] : 0)
Do
_ClipBoard_Open($hGUI)
$iFormat = _ClipBoard_EnumFormats($iFormat)
_ClipBoard_Close()
If $iFormat <> 0 Then
$vData = _ClipBoard_GetData($iFormat)
If Not IsBinary($vData) Then
$vData = StringToBinary($vData)
EndIf
IniWrite($sCB_File, 'CB' & ($iSect + 1), $iFormat, $vData)
EndIf
Until $iFormat = 0
как вставить в буфер - то что записано в этом ini ?
#include <Clipboard.au3>
Global $sCB_File = @ScriptDir & '\ClipBoard.ini'
Global $aSect = IniReadSection($sCB_File, 'CB1')
For $i = 1 To UBound($aSect) - 1
If $aSect[$i][0] = $CF_TEXT Or $aSect[$i][0] = $CF_OEMTEXT Or $aSect[$i][0] = $CF_UNICODETEXT Or $aSect[$i][0] = $CF_DSPTEXT Then
$aSect[$i][1] = BinaryToString($aSect[$i][1])
EndIf
_ClipBoard_SetData($aSect[$i][1], $aSect[$i][0])
Next
#include <Clipboard.au3>
#include <WinAPIFiles.au3>
Global $sCB_File = @ScriptDir & '\ClipBoard.ini'
Global $aSects = IniReadSectionNames($sCB_File)
Global $iSect = (IsArray($aSects) ? $aSects[0] : 0)
;Capture image
Send('{PRINTSCREEN}')
Sleep(200)
_ClipBoard_SaveToFile($sCB_File, 'CB' & $iSect + 1)
;Put some text to clipboard
ClipPut('')
ClipPut('Some text')
Sleep(200)
_ClipBoard_SaveToFile($sCB_File, 'CB' & $iSect + 2)
;Restore captured screenshot
_ClipBoard_LoadFromFile($sCB_File, 'CB' & $iSect + 1)
Func _ClipBoard_LoadFromFile($sFile, $sSect)
Local $aSect = IniReadSection($sFile, $sSect)
For $i = 1 To UBound($aSect) - 1
Switch $aSect[$i][0]
Case $CF_TEXT, $CF_OEMTEXT, $CF_UNICODETEXT, $CF_DSPTEXT
$aSect[$i][1] = BinaryToString($aSect[$i][1])
EndSwitch
If IsString($aSect[$i][1]) And FileExists($aSect[$i][1]) Then
$aSect[$i][1] = Binary(FileRead($aSect[$i][1]))
EndIf
_ClipBoard_SetData($aSect[$i][1], $aSect[$i][0])
Next
EndFunc
Func _ClipBoard_SaveToFile($sFile, $sSect)
Local $hGUI = GUICreate('')
Local $iFormat = 0, $vData
Do
_ClipBoard_Open($hGUI)
$iFormat = _ClipBoard_EnumFormats($iFormat)
_ClipBoard_Close()
If $iFormat <> 0 Then
$vData = _ClipBoard_GetData($iFormat)
Switch $iFormat
Case $CF_TEXT, $CF_OEMTEXT, $CF_UNICODETEXT, $CF_DSPTEXT
$vData = StringToBinary($vData)
Case Else
If BinaryLen($vData) > (30 * 1024) Then
$sTmp = _WinAPI_GetTempFileName(StringRegExpReplace($sFile, '\\[^\\]+$', ''), 'CBFile_')
$hFile = FileOpen($sTmp, 18)
FileWrite($hFile, $vData)
FileClose($hFile)
$vData = $sTmp
EndIf
EndSwitch
IniWrite($sFile, $sSect, $iFormat, $vData)
EndIf
Until $iFormat = 0
GUIDelete($hGUI)
EndFunc
Кого нет?не могу проверить работу скрипта - если этого нет.
#include <Clipboard.au3>
Global $sCB_Img_File = @ScriptDir & '\ClipBoard_Img.ini'
Global $sCB_Txt_File = @ScriptDir & '\ClipBoard_Txt.ini'
;Capture image
Send('!{PRINTSCREEN}')
Sleep(200)
_ClipBoard_SaveToFile($sCB_Img_File)
;Put some text to clipboard
ClipPut('')
ClipPut('Some text')
Sleep(200)
_ClipBoard_SaveToFile($sCB_Txt_File)
;Restore captured screenshot
_ClipBoard_LoadFromFile($sCB_Img_File)
Func _ClipBoard_LoadFromFile($sFile)
Local $aSect = StringRegExp(FileRead($sFile), '(?ms)^([^=]+)=([^\r\n]+)$', 3)
If Not IsArray($aSect) Or Mod(UBound($aSect), 2) <> 0 Then
Return SetError(1, 0, 0)
EndIf
For $i = 0 To UBound($aSect) - 1 Step 2
Switch $aSect[$i]
Case $CF_TEXT, $CF_OEMTEXT, $CF_UNICODETEXT, $CF_DSPTEXT
$aSect[$i + 1] = BinaryToString($aSect[$i + 1])
EndSwitch
_ClipBoard_SetData($aSect[$i + 1], $aSect[$i])
Next
EndFunc
Func _ClipBoard_SaveToFile($sFile)
Local $hGUI = GUICreate('')
Local $iFormat = 0, $vData
Local $sData = '', $hFile
Do
_ClipBoard_Open($hGUI)
$iFormat = _ClipBoard_EnumFormats($iFormat)
_ClipBoard_Close()
If $iFormat <> 0 Then
$vData = _ClipBoard_GetData($iFormat)
Switch $iFormat
Case $CF_TEXT, $CF_OEMTEXT, $CF_UNICODETEXT, $CF_DSPTEXT
$vData = StringToBinary($vData)
EndSwitch
$sData &= ($sData ? @CRLF : '') & $iFormat & '=' & $vData
EndIf
Until $iFormat = 0
$hFile = FileOpen($sFile, 2)
FileWrite($hFile, $sData)
FileClose($hFile)
GUIDelete($hGUI)
EndFunc
Всё верно, при копировании файлов в буфер обмена попадают пути к файлам, а не содержимое файлов.скопировал папку с файлами на 15мб, запускаю макрос - он создает два файла - один на 86 байт и другой на 5 килобайт
MsgBox(64, @ScriptName, ClipGet())
Содержимое в бинарном виде.Там записалось явно - не содержимое буфера обмена
Я все понимаю, но как мне поместить в буфер обмена - содержимое этого файла ini (которое находится в бинарном виде) ?Содержимое в бинарном виде.
Я это показал в примерах выше.Как скриптом автоит - скопировать содержимое - созданного файла ini в буфер обмена ?
#include <Clipboard.au3>
#include <Misc.au3>
Func _ClipBoard_LoadFromFile($sFile)
Local $aSect = StringRegExp(FileRead($sFile), '(?ms)^([^=]+)=([^\r\n]+)$', 3)
If Not IsArray($aSect) Or Mod(UBound($aSect), 2) <> 0 Then
Return SetError(1, 0, 0)
EndIf
For $i = 0 To UBound($aSect) - 1 Step 2
$aSect[$i] = Int($aSect[$i])
Switch $aSect[$i]
Case $CF_TEXT, $CF_OEMTEXT, $CF_UNICODETEXT, $CF_DSPTEXT
$aSect[$i + 1] = BinaryToString($aSect[$i + 1])
Case $CF_HDROP
_ClipPutFile(BinaryToString($aSect[$i + 1]), @LF)
Sleep(100)
EndSwitch
_ClipBoard_SetData($aSect[$i + 1], $aSect[$i])
Next
EndFunc
Func _ClipBoard_SaveToFile($sFile)
Local $hGUI = GUICreate('')
Local $iFormat = 0, $vData
Local $sData = '', $hFile
Do
_ClipBoard_Open($hGUI)
$iFormat = _ClipBoard_EnumFormats($iFormat)
_ClipBoard_Close()
If $iFormat <> 0 Then
$vData = _ClipBoard_GetData($iFormat)
Switch $iFormat
Case $CF_TEXT, $CF_OEMTEXT, $CF_UNICODETEXT, $CF_DSPTEXT
$vData = StringToBinary($vData)
Case $CF_HDROP
$vData = StringToBinary(ClipGet())
EndSwitch
$sData &= ($sData ? @CRLF : '') & $iFormat & '=' & $vData
EndIf
Until $iFormat = 0
$hFile = FileOpen($sFile, 2)
FileWrite($hFile, $sData)
FileClose($hFile)
GUIDelete($hGUI)
EndFunc
Я пытаюсь протестировать ваш скрипт.Либо я не понимаю что ты пытаешься сделать.
Что скопировал?Скопировал в буфер обмена, запустил скрипт - никаких ini файлов рядом - не появилось.
Что скопировал?