Page 1 sur 2
[R] Copier...Coller un fichier
Posté : mar. 15 nov. 2011 21:51
par papami
Bonsoir
Peut-on réaliser par script la copie de fichier effectuée habituellement par clic-droit/copier dans Windows ...
c'est-à-dire transférer le fichier dans le buffer Windows (à partir d'un chemin/nom de fichier obtenu dans le script) pour coller à un autre endroit, cette fois par clic-droit et coller ?
je ne connais rien à la manipulation des .dll mais il me semble que shell32.dll et inetcplc.dll sont utilisées (et peut-être d'autres ?) ?
j'ai recherché sur le forum mais le logiciel supprime arbitrairement le mot 'fichier' et je ne trouve que plusieurs centaines de réponses axées sur le presse-papier 'classique' (ClipGet et ClipPut) ou quelques-unes sur Copyfile
Merci
Re: [..] copier...coller un fichier
Posté : mar. 15 nov. 2011 21:53
par TT22
FileCopy ?
Re: [..] copier...coller un fichier
Posté : mar. 15 nov. 2011 22:05
par papami
TT22 a écrit :FileCopy ?
Merci mais ... non.
Ce n'est pas ce que je cherche à réaliser
...
Re: [..] Copier...Coller un fichier
Posté : mar. 15 nov. 2011 22:45
par Tlem
Pouvez-vous expliquer pourquoi cela ne vous convient pas, car cette fonction permet la copie d'un fichier tout comme le fait Windows par le presse-papier ?
Sinon, vous avez la réponse exacte à ce que vous demandez ici :
http://www.autoitscript.com/forum/topic ... __p__89276
Mais comme il n'y à pas de code fonctionnel, je doute que cela vous convienne.
Re: [..] Copier...Coller un fichier
Posté : mar. 15 nov. 2011 23:17
par papami
Tlem a écrit :Pouvez-vous expliquer pourquoi cela ne vous convient pas, car cette fonction permet la copie d'un fichier tout comme le fait Windows par le presse-papier ?
Sinon, vous avez la réponse exacte à ce que vous demandez ici :
http://www.autoitscript.com/forum/topic ... __p__89276
Mais comme il n'y à pas de code fonctionnel, je doute que cela vous convienne.
merci.
a) j'utilise bien fileCopy mais cette fois ce n'est pas ce que je recherche car il faut soit indiquer la destination, soit ouvrir un dialogue pour l'obtenir (ce qui est ma solution de replis) alors qu'une fois en buffer l'utilisateur peut mettre le pointeur immédiatement sur le bureau (ou ailleurs) et clic-droit coller ... ou le faire ultérieurement même une fois le script fermé (s'il n'y a pas un autre 'copier' entre temps évidemment)
b)
oui le lien mène bien à une partie de la réponse .... faut-il encore trouver si cela a été appliqué en Autoit
merci de me l'avoir dégoté (j'en ai pour un moment à le traduire
)
à+
Re: [..] Copier...Coller un fichier
Posté : mer. 16 nov. 2011 00:12
par Tlem
Je n'ai pas d'idée sur la manière de bufferiser dans le press-papier, par contre il est possible de tricher en bloquant le clavier/souris quelques secondes et en exécutant la séquence :
- Ouvrir l'explorer sur le dossier du fichier.
- Envoyer la séquence de touche correspondant au nom du fichier.
- Envoyer la séquence de touche CTRL + C
- Fermer l'explorer.
- Ré-activer clavier/souris.
Certes, c'est une méthode très space, mais cela donne une possibilité alternative à quelque chose qui n'est pas encore fonctionnel.
Re: [..] Copier...Coller un fichier
Posté : mer. 16 nov. 2011 00:32
par papami
oui, c'est aussi une solution ... mais faudrait un rideau devant l'écran ...
je vais peut-être mettre mon désir au placard ... en attendant mieux
bonne nuit !
Re: [..] Copier...Coller un fichier
Posté : mer. 16 nov. 2011 03:19
par Iste
Re: [..] Copier...Coller un fichier
Posté : mer. 16 nov. 2011 08:59
par papami
ben à première vue non
- je contrôle l'état du presse-papier Win (clic-droit sur le bureau par exemple,
'coller' est grisé
- je lance le script en y ayant indiqué un chemin/fichier
- l'affaire semble dans le sac : clic-droit : 'coller' est visible
- je le valide ... rien ne sort
pas étonnant, car si j'envoie le même résultat dans un fichier, ce dernier ne comporte qu'un seul caractère (14 en hexa)
mais je vais y regarder de plus près, merci
Re: [..] Copier...Coller un fichier
Posté : mer. 16 nov. 2011 09:59
par zeshrek
Tu as la solution de rajouter un menu contextuel au clic droit.
Genre tu fais ton copier, cad tu stocke qqpart (dans la registry par ex) la source de la copie, et quand ton user clique droit ur le bureau, il a l'option 'coller avec papami_copy'
Et la ton script fait un bête filecopy.
Re: [..] Copier...Coller un fichier
Posté : mer. 16 nov. 2011 10:26
par Iste
Tien etrange, vous utilisez quel OS ?
Chez moi tout fonction tres bien.
j'ai utilisé presque ligne pour ligne le code que je vous ai passé
► Afficher le texte
Code : Tout sélectionner
#include <Clipboard.au3>
$Clip = CreerFileClip(FileOpenDialog("","","(*.*)"))
_ClipBoard_SetData($Clip, $CF_HDROP)
Func CreerFileClip($Chemin)
Local $NULL = StringLeft(BinaryToString(0), 1)
Local $Clip = Chr(20) & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & Chr(1) & _
$NULL & $NULL & $NULL
For $i = 1 To StringLen($Chemin)
$Clip &= StringMid($Chemin, $i, 1) & $NULL
Next
$Clip &= $NULL & $NULL & $NULL & $NULL
Return $Clip
EndFunc
Re: [..] Copier...Coller un fichier
Posté : mer. 16 nov. 2011 11:23
par sylvanie
Et pourquoi pas simplement _ClipPutFile ?
Re: [..] Copier...Coller un fichier
Posté : mer. 16 nov. 2011 11:53
par Ahbadiane
Bonjour papami,
Regarde si mon utilitaire
ClipSpirit répond à ta demande.
Il permet de copier un ou plusieurs liens fichiers depuis l’explorer Windows (par un simple copier) et ensuite pour de replacer ces liens dans le presse-papier : Dans ClipSpirit, choix Action/Copier les liens fichiers dans le presse-papier.
Si c'est ce que tu cherches, je t'extrairai les éléments.
Re: [..] Copier...Coller un fichier
Posté : ven. 18 nov. 2011 11:35
par papami
sylvanie a écrit :Et pourquoi pas simplement _ClipPutFile ?
parce que je suis trop bêêête pour n'avoir pas bien cherché avec F1
(apparemment je ne suis pas le seul
)
il n'y a pas ici de smileys 'bisous' mais c'est comme si
Merci !
- pour Iste : Win2000 pro sp4
j'ai repris votre script. après validation d'un fichier le presse-papier est bien activé, mais rien ne se colle ensuite
et merci à tous pour vos réponses
Re: [..] Copier...Coller un fichier
Posté : ven. 18 nov. 2011 11:54
par Tlem
sylvanie a écrit :Et pourquoi pas simplement _ClipPutFile ?
Whahouu, pourtant j'avais fait défilé les fonctions
Clipxxx pour voir si sa existait, mais j'étais resté aux fonctions
ClipBoardxxx.
Shame on me !
D’ailleurs la consultation de cette fonction dans
Misc.au3 est très instructive.
Re: [R] Copier...Coller un fichier
Posté : ven. 18 nov. 2011 12:31
par Iste
Idem, j'ai pourtant regardé plusieurs foi pour ca
Content de connaitre cette fonction, plutot bien fichue !
Re: [R] Copier...Coller un fichier
Posté : ven. 18 nov. 2011 14:20
par zeshrek
Et bien comme ca on est au moins 3 a avoir les yeux qui ont besoin d'une révision.
Re: [R] Copier...Coller un fichier
Posté : mer. 27 juin 2012 20:14
par TommyDDR
Désolé de faire un mini déterrage de post mais je tenais à ajouter une précision (après avoir galéré pour trouver pourquoi mon script ne marchait pas).
Si vous utilisez _ClipPutFile, vous ne pourrez plus utiliser d'autres fonctions du clipboard !
ClipPut, _ClipBoard_SetData etc ne marcheront plus.
Exemple :
Code : Tout sélectionner
#include <Misc.au3>
_ClipPutFile(@SystemDir & "\calc.exe")
ClipPut("test")
Votre presse-papier ne contiendra pas "test".
Du coup, il reste ma technique disponible dans un post au fin fond du forum (que je remonte pour vous) :
Code : Tout sélectionner
#include <Clipboard.au3>
_ClipBoard_SetData(CreerFileClip(@ScriptDir & $ExeFile), $CF_HDROP)
Func CreerFileClip($Chemin)
$Chemin = StringReplace($Chemin, @CRLF, @LF)
$Chemin = StringSplit($Chemin, @LF, 1)
Local $NULL = StringLeft(BinaryToString(0), 1)
Local $Clip = Chr(20) & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & $NULL & Chr(1) & $NULL
For $j = 1 To $Chemin[0]
$Clip &= $NULL & $NULL
For $i = 1 To StringLen($Chemin[$j])
$Clip &= StringMid($Chemin[$j], $i, 1) & $NULL
Next
Next
$Clip &= $NULL & $NULL & $NULL & $NULL
Return $Clip
EndFunc
Re: [R] Copier...Coller un fichier
Posté : mer. 27 juin 2012 21:43
par Sea
Ou alors avec les API(_WinAPI_CopyFileEx) ce qui donne un truc comme(petit tool codé en 5min si tu veux que je commente fais mois signe
)
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Simple copieur", 513, 176, 192, 124)
Global $Label1 = GUICtrlCreateLabel("data", 48, 112, 250, 17)
Global $Progress1 = GUICtrlCreateProgress(24, 32, 257, 41)
Global $Button1 = GUICtrlCreateButton("copier", 354, 16, 129, 57)
Global $Button2 = GUICtrlCreateButton("arreter", 354, 90, 129, 57)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Opt('TrayAutoPause', 0)
Global Const $PROGRESS_CONTINUE = 0, $PROGRESS_CANCEL = 1
Global $hProgressProc = DllCallbackRegister('_ProgressProc', 'dword', 'uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;long_ptr')
While 1
Global $nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
case $Button1
$file_a_copier = FileOpenDialog('Select file',@ScriptDir,'All files (*.*)')
$destination = FileSaveDialog('Save your files',@ScriptDir,'All files(*.*)')
_WinAPI_CopyFileEx($file_a_copier, $destination, 0, DllCallBackGetPtr($hProgressProc))
DllCallbackFree($hProgressProc)
EndSwitch
WEnd
Func _ProgressProc($iTotalFileSize, $iTotalBytesTransferred, $iStreamSize, $iStreamBytesTransferred, $iStreamNumber, $iCallbackReason, $hSourceFile, $hDestinationFile, $iData)
Local $Percent = Round($iTotalBytesTransferred / $iTotalFileSize * 100)
GUICtrlSetData($Label1,"Data: "& $Percent&" / 100% => "&$iTotalBytesTransferred&" octect sur "&$iTotalFileSize&" octects" )
GUICtrlSetData($Progress1,$Percent)
If $nMsg = $Button2 Then;si esc est appuyé
Return $PROGRESS_CANCEL
Else
Return $PROGRESS_CONTINUE
EndIf
EndFunc ;==>_ProgressProc
Func _IsPressed($sHexKey, $vDLL = 'user32.dll')
Local $a_R = DllCall($vDLL, "short", "GetAsyncKeyState", "int", '0x' & $sHexKey)
If @error Then Return SetError(@error, @extended, False)
Return BitAND($a_R[0], 0x8000) <> 0
EndFunc ;==>_IsPressed
Func _WinAPI_CopyFileEx($sExistingFile, $sNewFile, $iFlags = 0, $pProgressProc = 0, $pData = 0)
Local $Ret = DllCall('kernel32.dll', 'int', 'CopyFileExW', 'wstr', $sExistingFile, 'wstr', $sNewFile, 'ptr', $pProgressProc, 'long_ptr', $pData, 'ptr', 0, 'dword', $iFlags)
If (@error) Or (Not $Ret[0]) Then
Return SetError(1, 0, 0)
EndIf
Return 1
EndFunc ;==>_WinAPI_CopyFileEx
Re: [R] Copier...Coller un fichier
Posté : jeu. 28 juin 2012 14:08
par TommyDDR
Je ne sais pas si vous avez compris la problématique qui est de copier un fichier dans le presse-papier.
Votre solution montre comment copier un fichier dans le sens "écrire sur le disque dur". D’ailleurs pour cela il y a aussi le FileCopy(). Mais la question était bien de passer par le presse-papier.