Page 1 sur 1
[R] Limite de _ClipBoard_GetData()
Posté : ven. 22 août 2008 12:36
par Ahbadiane
Bonjour,
A nouveau une question liée au presse-papier
Est-ce que quelqu'un peut me donner une explication sur la
limitation de la taille des infos de type texte que sait retourner la fonction
_ClipBoard_GetData()
Je ne peux pas aller au-delà de 8192 caractères, alors que la fonction ClipGet() va bien plus loin (j'ai testé plus + de 50.000.000 car)
J'ai légèrement adapté l'exemple lié à _ClipBoard_GetData()
Pour tester, intervertir _ClipBoard_GetData () par ClipGet() en ligne 27
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstantsEx.au3>
#include <ClipBoard.au3>
AutoItSetOption("MustDeclareVars", 1)
Global $iMemo
Test_ClipBoard_GetData()
Func Test_ClipBoard_GetData()
Local $hGUI, $btn_SetData, $btn_GetData, $sData
; Create GUI
$hGUI = GUICreate("Clipboard", 600, 450)
$iMemo = GUICtrlCreateEdit("", 2, 2, 596, 396)
GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
$btn_SetData = GUICtrlCreateButton("Set ClipBoard Data", 150, 410, 120, 30)
$btn_GetData = GUICtrlCreateButton("Get ClipBoard Data", 300, 410, 120, 30)
GUISetState()
; Loop until user exits
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $btn_SetData
_ClipBoard_SetData ("ClipBoard Library")
Case $btn_GetData
$sData = _ClipBoard_GetData (); ClipGet() ;<====
MemoWrite($sData)
EndSwitch
WEnd
EndFunc
Func MemoWrite($sMessage = "")
GUICtrlSetData($iMemo, "--------------------- " & StringLen($sMessage) & " caractères ---------------------" & @CRLF, 1)
GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
GUICtrlSetData($iMemo, "------------------------------------------------------------------" & @CRLF & @CRLF, 1)
EndFunc
Re: [..] Limite de _ClipBoard_GetData()
Posté : ven. 22 août 2008 21:42
par sylvanie
Bonsoir,
je dirai que ça coule de source (désolé pour le jeu de mot navrant

)
_ClipBoard_GetData est un wrapper confortable de _ClipBoard_GetDataEx, et si on regarde la source en question, on voit qu'il ya une limitation a 8192 bytes :
► Afficher le texte
Code : Tout sélectionner
Func _ClipBoard_GetData($iFormat = 1)
Local $hMemory, $tData
If Not _ClipBoard_IsFormatAvailable($iFormat) Then Return SetError(-1, 0, 0)
If Not _ClipBoard_Open(0) Then Return SetError(-2, 0, 0)
$hMemory = _ClipBoard_GetDataEx($iFormat)
_ClipBoard_Close()
If $hMemory = 0 Then Return SetError(-3, 0, 0)
Switch $iFormat
Case $CF_TEXT, $CF_OEMTEXT
;~ $tData = DllStructCreate("char Text[2097152]", $hMemory)
$tData = DllStructCreate("char Text[8192]", $hMemory)
Return DllStructGetData($tData, "Text")
Case $CF_UNICODETEXT
Return _WinAPI_WideCharToMultiByte($tData)
Case Else
Return $hMemory
EndSwitch
EndFunc ;==>_ClipBoard_GetData
[R] Limite de _ClipBoard_GetData()
Posté : ven. 22 août 2008 23:09
par Ahbadiane
Bonsoir,
Merci Sylvanie, eh oui la réponse était dans les sources !