[R] Récupérer un fichier situé dans le presse papier.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2104
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

[R] Récupérer un fichier situé dans le presse papier.

#1

Message par TommyDDR »

Bonjour,

J'ai pour projet en ce moment de créer une sorte de "super presse papier" qui garderai les x derniers éléments copié en mémoire.

J'ai réussi a récupérer le texte, les images (impression écran), une analyse du texte me permet de savoir si c'est un lien internet, et en bonus pour les développeur, la copie d'une couleur (0x......).

Il ne me reste plus qu'a récupérer les fichier (lorsque l'on copie un fichier à partir de l'explorer)

Ma question est donc: Comment récupérer (le handle ?) du fichier ciblé pour le stocker puis remettre celui ci dans le presse papier pour pouvoir le recoller ultérieurement.

Merci.

Edit :
Utilisation du programme :
Ctrl + Alt : Affiche / cache la fenetre
Ctrl + UP / DOWN : Sélectionne l item adjacent en haut / bas (quand l'item est selectionné, il est copier dans le presse papier)
Ctrl + C / ImprEcr / clic droit, copier : Ajoute un item dans le programme
Ctrl + Enter : Colle l'item.
Ctrl + ² : Quitte le programme
MAJ du fichier
Voici une impression écran du programme
Clip.JPG
Clip.JPG (10.08 Kio) Vu 3114 fois
Clip.zip
(5.31 Kio) Téléchargé 150 fois
Modifié en dernier par TommyDDR le mer. 12 janv. 2011 17:19, modifié 6 fois.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
FuriousFred
Niveau 1
Niveau 1
Messages : 14
Enregistré le : mer. 23 sept. 2009 22:47
Status : Hors ligne

Re: [..] Récupérer un fichier dans situé dans le presse papier.

#2

Message par FuriousFred »

Bonjour,

à ma connaissance on ne peut pas récupérer le handle d'un fichier / dossier.

Toutefois il est possible d'en récupérer un chemin... Je n'ai jamais poussé l'idée mais à vôtre place, j'irais voir du côté des fonctions FileExits() , FileFindFirstFind(), FileFindNextFile() et enfin FileCopy(). Mais je vous envoie sur un long chemin sinueux quand même.

Sinon vous pouvez essayer d'utiliser la variable $CmdLine[1] à utiliser avec l'include array.au3, mais là encore ce n'est qu'une piste à explorer.

Désolé de ne pouvoir faire mieux et bon courage pour vôtre script. En espérant que d'autres auront une meilleure solution à proposer.

Edit: Sujet déjà traité: http://autoitscript.fr/forum/viewtopic.php?f=3&t=4915


FuriousFred
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2104
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Récupérer un fichier dans situé dans le presse papier.

#3

Message par TommyDDR »

J'avais pensé à cela aussi mais je ne passerai plus par le presse papier en faisant cela.
Un ctrl+v doit resté la "propriété" de windows^^

Par exemple, si l'on fait ctrl+v dans msn, si j'utilise votre méthode, cela n'enverra pas le fichier par msn.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2104
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Récupérer un fichier dans situé dans le presse papier.

#4

Message par TommyDDR »

Humm, après bonne annalyse de votre réponse, je pense que vous n'avez pas bien compris ma demande.

Je m'explique.

Cas 1:
Vous êtes dans un fichier texte, vous selectionnez du texte et pressez les touches ctrl+c (ou clic droit copier)
Là, windows va mettre ce texte dans le presse papier(ClipGet() permet de récupérer le texte et ClipPut() permet de le remettre dedent
Conclusion : Je peux stocker du texte qui se trouve dans le press papier et le réinjecter dedent.

Cas 2:
Vous êtes sur votre bureau, vous pressez impr ecran.
Là, windows va mettre un pointeur sur une image dans le presse papier (_ClipBoard_GetData($CF_DIB) permet de récupérer la donnée pointé par le presse papier et _ClipBoard_SetData($Donnee, $CF_DIB) permet de réinjecter celle-ci dedent
Conclusion : Je peux stocker une image qui se trouve dans le press papier et la réinjecter dedent.

Cas 3:
Vous êtes dans l'explorer, vous pressez les touches ctrl+c (ou clic droit copier)
Là, windows va mettre ????? dans le presse papier (???? = je ne sais pas ce qu'il met ^^) ClipGet() permet de récupérer le chemin complet du fichier et je ne sais pas quel fonction utiliser pour remettre ?????? dans le presse papier (ClipPut($Chemin) ne ferait que mettre du texte dans le presse papier)
Conclusion : Je peux stocker le chemin du fichier qui se trouve dans le press papier mais pas le réinjecter dedent.

Need Help :)

Ps1 : Les fonctions FileFindFirstFile et FileFindNextFile ne me seront pas utile, je ne veut pas lister les fichiers/dossiers d'un dossier vu que de toute manière je peux récupérer le chemin du fichier.

Ps2 : La variable $CmdLine permet de récupérer les arguments envoyé au main de l'executable (Qui ne dépend pas du tout de Array.au3) et ne peut en aucun cas m'aider)

Ps3 : Le "sujet déjà traité" n'a pas de rapport avec ma demande :s

Ps4 : J'ai connu plus sinueux comme chemin que les Filexxxx() ^^
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
Fish
Niveau 5
Niveau 5
Messages : 178
Enregistré le : sam. 23 oct. 2010 19:28
Localisation : Devant mon ordinateur.
Status : Hors ligne

Re: [..] Récupérer un fichier dans situé dans le presse papier.

#5

Message par Fish »

Bonjour!

Je pense qu'il faut créer un dossier pendant l'exécution du script dans le répertoire ou se trouve le script (@scriptdir) et ouvrir ce dossier, et envoyer Ctrl+v (coller). Si c'est du texte sa ne ferra rien, si c'est autre chose sa le mettra dans le dossier.

Après je ne suis qu'un débutant, je ne suis pas sur que cela marche et ne sait pas si c'est la meilleur solution.
Cordialement,
Fish-panai.
P.S (Pas Salé): Vive le poisson pané.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2104
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Récupérer un fichier dans situé dans le presse papier.

#6

Message par TommyDDR »

... pourquoi personne ne comprend ma demande ...

Tester mon script pour voir comment il fonctionne.

Je veut STOCKER ce qu'il se trouve dans le presse papier pour le remettre dedans plus tard.

Je sais stocker du texte, une image, mais pas fichier.

Si vous préférez, je cherche (grâce à un chemin de fichier), à mettre celui-ci dans le presse papier pour qu'un ctrl+v puisse coller celui ci.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
Fish
Niveau 5
Niveau 5
Messages : 178
Enregistré le : sam. 23 oct. 2010 19:28
Localisation : Devant mon ordinateur.
Status : Hors ligne

Re: [..] Récupérer un fichier situé dans le presse papier.

#7

Message par Fish »

:) C'est impossible de mettre un fichier dans une variable si c'est sa que tu cherche, au pire tu pourra y mettre le chemin d'accès de ton fichier. Je pense que la seule solution et de faire que ton programme le colle dans un dossier et le reprenne dans ce même dossier plus tard...

En espèrent t'avoir aidé.
Cordialement,
Fish-panai.
P.S (Pas Salé): Vive le poisson pané.
Avatar du membre
FuriousFred
Niveau 1
Niveau 1
Messages : 14
Enregistré le : mer. 23 sept. 2009 22:47
Status : Hors ligne

Re: [..] Récupérer un fichier situé dans le presse papier.

#8

Message par FuriousFred »

TommyDDR a écrit : Il ne me reste plus qu'a récupérer les fichier (lorsque l'on copie un fichier à partir de l'explorer)
Autant pour moi, j'avais zappé le "à partir de l'explorer". J'ai compris ton problème pour ton script, mais je ne sais pas comment le résoudre pour le moment, je remet le nez dedans Lundi si le sujet n'est pas [R] d'ici là.

Bon W.E. à tous.

Cordialement,
Furiousfred
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2104
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Récupérer un fichier situé dans le presse papier.

#9

Message par TommyDDR »

Merci à toi FuriousFred, ça fait plaisir de voir que tu cherches avec moi ^^
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Récupérer un fichier situé dans le presse papier.

#10

Message par GaRydelaMer »

Bonjour

Alors quand tu copies des fichiers depuis l'explorateur, windows ajoute les chemins dans le presse papier

pour tester, copie des fichiers dans l'explorateur, Ctrl+C

Sous scite; exécute le fichier au3 de ton choix avec

Code : Tout sélectionner

Local $aFiles = StringSplit(ClipGet(), @CRLF)
tu auras un tableau avec les fichiers à copier.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2104
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Récupérer un fichier situé dans le presse papier.

#11

Message par TommyDDR »

... Je sais que vous êtes de bonne volonté ^^' mais je suis déjà au courant de tout cela, je souhaite juste savoir QUOI récupérer pour pouvoir le REMETTRE dans le presse papier plus tard.

S'il faut seulement le chemin du fichier, soit ! Mais que dois-je faire avec ce chemin pour le remettre dans le presse papier ?

Un ClipPut(Chemin) ne marche bien évidemment pas, cela mettrai juste une chaine de caractère dans le presse papier.

Ps : je fourni les sources, profitez en pour y jeter un œil ^^.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2104
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Récupérer un fichier situé dans le presse papier.

#12

Message par TommyDDR »

He bien !!!!! :)

Après de longues recherches j'ai enfin réussi à arriver à mes fins !

Voici un exemple de code qui permet de mettre un fichier dans le press papier à partir de son nom.

Code : Tout sélectionner

#include <Clipboard.au3>

$Clip = CreerFileClip("Chemin de votre fichier ici")
_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
Résolu.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Répondre