- Сообщения
- 8,672
- Репутация
- 2,483
У кого есть рабочий пример запоминания и последующего восстановления содержимого буфера обмена?
Пока делаю вот так:
Работает, т.е содержимое восстанавливается, но за исключением одного(?) формата - скопированный файл.
Никак не могу понять почему не восстанавливает скопированный файл .
Пока делаю вот так:
Код:
#include <ClipBoard.au3>
$sText = _ClipBoard_GetSelText()
MsgBox(0, '', $sText)
Func _ClipBoard_GetSelText()
Local $aOld_Clip, $iTimer, $sSelText
Local $hWnd = GUICreate('')
$aOld_Clip = _ClipBoard_Remember($hWnd)
If @error Or Not _ClipBoard_Open($hWnd) Then
GUIDelete($hWnd)
Return SetError(1, 0, '')
EndIf
ClipPut('')
Send('^{INS}')
$iTimer = TimerInit()
Do
If _ClipBoard_IsFormatAvailable($CF_TEXT) Then
$sSelText = ClipGet()
EndIf
Sleep(10)
Until TimerDiff($iTimer) > 250 Or $sSelText <> ''
_ClipBoard_Close()
_ClipBoard_Restore($aOld_Clip)
GUIDelete($hWnd)
If StringStripWS($sSelText, 8) = '' Then
Return SetError(2, 0, '')
EndIf
Return $sSelText
EndFunc
Func _ClipBoard_Remember($hWnd)
Local $iFormat
Local $aRet[1][2]
If Not _ClipBoard_Open($hWnd) Then
Return SetError(1, 0, 0)
EndIf
Do
$iFormat = _ClipBoard_EnumFormats($iFormat)
If $iFormat <> 0 Then
$aRet[0][0] += 1
ReDim $aRet[$aRet[0][0] + 1][2]
$aRet[$aRet[0][0]][1] = $iFormat
EndIf
Until $iFormat = 0
_ClipBoard_Close()
For $i = 1 To $aRet[0][0]
$aRet[$i][0] = _ClipBoard_GetData($aRet[$i][1])
Next
Return $aRet
EndFunc
Func _ClipBoard_Restore(ByRef $aClip)
If UBound($aClip, 0) <> 2 Then
Return SetError(1)
EndIf
For $i = 1 To $aClip[0][0]
_ClipBoard_SetData($aClip[$i][0], $aClip[$i][1])
Next
$aClip = 0
Return 1
EndFunc
Работает, т.е содержимое восстанавливается, но за исключением одного(?) формата - скопированный файл.
Никак не могу понять почему не восстанавливает скопированный файл .