Je bloque sur un problème depuis quelques heures, alors je viens voir si une personne est plus intelligente que moi
Je veux copier un lien de fichier dans le presse papier pour pouvoir le coller dans un dossier windows.
J'utilise un code trouvé (de Dobro je crois) que j'ai un petit peu modifié (unicode oblige!)
Cela marche avec un nom de fichier assez cours mais pas lorsque ce nom dépasse un certain nombre de caractère.
On voit sur le debuggeur une suite de caractère apres le nom de fichier qui ne sont pas le bienvenue!
Merci de votre aide
Code : Tout sélectionner
Procedure addClipboardFiles(List files.s())
Protected hDrop.DROPFILES, *dat, add.i, hMem.i, *buff
If OpenClipboard_(0)
;on vide le presse papier
EmptyClipboard_()
;on ajoute met tous les fichiers dans une zone mémoire (avec le chr(0))
FirstElement(files())
ForEach files()
*Ascii=Ascii( files())
If *dat
add = MemorySize(*dat)
Else
add = 0
EndIf
Debug Len(files())
*dat = ReAllocateMemory(*dat, add+Len(files())+1)
nb=PokeS(*dat+add, PeekS(*Ascii), Len(files()))
PokeB(*dat+add+Len(files()), 0)
Next
hDrop\pFiles = SizeOf(DROPFILES)
hMem = GlobalAlloc_(#GMEM_MOVEABLE, SizeOf(DROPFILES)+MemorySize(*dat))
*buff = GlobalLock_(hMem)
CopyMemory(@hDrop, *buff, SizeOf(DROPFILES))
CopyMemory(*dat, *buff+SizeOf(DROPFILES), MemorySize(*dat))
GlobalUnlock_(hMem)
SetClipboardData_(#CF_HDROP, hMem)
CloseClipboard_()
ProcedureReturn 1
EndIf
ProcedureReturn 0
EndProcedure
;renvoi les fichiers contenus dans le press-papier dans files()
Procedure getClipboardFiles(List files.s())
Protected hDrop, i.i, FileName.s
If OpenClipboard_(0) And IsClipboardFormatAvailable_(#CF_HDROP)
hDrop = GetClipboardData_(#CF_HDROP)
Repeat
FileName = Space(1024)
DragQueryFile_(hDrop, i, @FileName, 1024)
FileName = Trim(FileName)
If FileName <> ""
AddElement(files())
files() = FileName
EndIf
i + 1
Until FileName = ""
CloseClipboard_()
ProcedureReturn i
EndIf
ProcedureReturn 0
EndProcedure
NewList files.s()
AddElement(files())
;files()="F:\124567890124567890124567890\1.txt" ;nom cours -> Fonctionne
files()="F:\124567890124567890124567890124567890124567890124567890124567890124567890\1.txt" ;nom long cours -> plantouille
addClipboardFiles(files.s())
; on récupère le nom de fichier stocker pour vérifier
NewList TestList.s()
getClipboardFiles(TestList.s())
ResetList(TestList())
While NextElement(TestList())
Debug TestList()
Wend