[R] Enregistrement image provenant du presse papier
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- scorp84
- Niveau 7

- Messages : 415
- Enregistré le : mar. 04 nov. 2008 21:51
- Localisation : Avignon, France
- Status : Hors ligne
[R] Enregistrement image provenant du presse papier
Bonjour à tous,
Je reviens vers vous pour mon histoire de capture écran...
La seule façon que j'ai trouvée de faire une capture écran complète (on fonctionne en double écran) et d'utiliser la fonction : Send("{PRINTSCREEN}")
Mon problème est le suivant : comment enregistrer l'image contenue dans le presse-papier sur le disque dur après avoir exécuté cette fonction ?
Merci d'avance pour votre aide.
Amicalement.
BM
Je reviens vers vous pour mon histoire de capture écran...
La seule façon que j'ai trouvée de faire une capture écran complète (on fonctionne en double écran) et d'utiliser la fonction : Send("{PRINTSCREEN}")
Mon problème est le suivant : comment enregistrer l'image contenue dans le presse-papier sur le disque dur après avoir exécuté cette fonction ?
Merci d'avance pour votre aide.
Amicalement.
BM
Modifié en dernier par scorp84 le mar. 27 avr. 2010 14:03, modifié 3 fois.
-
GaRydelaMer
- Niveau 7

- Messages : 450
- Enregistré le : mer. 18 mars 2009 22:12
- Localisation : Montpellier
- Status : Hors ligne
Re: [..] Enregistrement image provenant du presse papier
Re 
La réponse ici dans la doc:
#Include <Clipboard.au3>
_ClipBoard_GetData([$iFormat = 1])
Success: Text for text based formats or Binary data for all other formats
@extended is set to the # of characters for Text, or # of bytes for Binary
Pour une image tu vas avoir le contenu du fichier en binaire je pense j'ai pas testé, donc ensuite tu écris directement les données binaires dans un fichier.
La réponse ici dans la doc:
#Include <Clipboard.au3>
_ClipBoard_GetData([$iFormat = 1])
Success: Text for text based formats or Binary data for all other formats
@extended is set to the # of characters for Text, or # of bytes for Binary
Pour une image tu vas avoir le contenu du fichier en binaire je pense j'ai pas testé, donc ensuite tu écris directement les données binaires dans un fichier.
- scorp84
- Niveau 7

- Messages : 415
- Enregistré le : mar. 04 nov. 2008 21:51
- Localisation : Avignon, France
- Status : Hors ligne
Re: [..] Enregistrement image provenant du presse papier
C'est bien ça mon problème 
En fait j'avais trouvé :
Mais il me sort un code erreur à -4 et je n'arrive pas à trouver la correspondance de ce code 
As tu une idée d'où peut venir mon erreur ?
Merci encore
Amicalement.
BM
En fait j'avais trouvé :
Code : Tout sélectionner
$hBitmap=_ClipBoard_GetData ($CF_BITMAP)
MsgBox(0,"test",$hBitmap & @LF & @LF & @error)
_ScreenCapture_SaveImage($bug_rep & "\" & $bug_img, $hBitmap)
As tu une idée d'où peut venir mon erreur ?
Merci encore
Amicalement.
BM
- scorp84
- Niveau 7

- Messages : 415
- Enregistré le : mar. 04 nov. 2008 21:51
- Localisation : Avignon, France
- Status : Hors ligne
Re: [..] Enregistrement image provenant du presse papier
...
GaRydelaMer : J'ai essayé de suivre ton conseil et de mettre le tout dans un fichier :
Mais il me dit que le format n'est pas correct.
Si j'ouvre le fichier avec le bloc note, il contient "0".
Je me plante quelque part mais je ne trouve pas où

Merci d'avance pour votre aide à tous
Amicalement.
BM
GaRydelaMer : J'ai essayé de suivre ton conseil et de mettre le tout dans un fichier :
Code : Tout sélectionner
Send("{PRINTSCREEN}")
$hBitmap=_ClipBoard_GetData ($CF_BITMAP)
FileOpen($bug_rep & "\" & $bug_img,2)
FileWrite ($bug_rep & "\" & $bug_img,$hBitmap)
FileClose($bug_rep & "\" & $bug_img)
Si j'ouvre le fichier avec le bloc note, il contient "0".
Je me plante quelque part mais je ne trouve pas où
Merci d'avance pour votre aide à tous
Amicalement.
BM
-
ani
- Niveau 11

- Messages : 1826
- Enregistré le : lun. 23 juil. 2007 12:31
- Localisation : Bureau
- Status : Hors ligne
Re: [..] Enregistrement image provenant du presse papier
salut
regarde le lien suivant : http://www.autoitscript.com/forum/index ... opic=70237
bonne continuation
regarde le lien suivant : http://www.autoitscript.com/forum/index ... opic=70237
bonne continuation
- scorp84
- Niveau 7

- Messages : 415
- Enregistré le : mar. 04 nov. 2008 21:51
- Localisation : Avignon, France
- Status : Hors ligne
Re: [..] Enregistrement image provenant du presse papier
Salut Ani !
Merci pour l'info
Je regarde ça de suite.
Amicalement.
BM
Merci pour l'info
Je regarde ça de suite.
Amicalement.
BM
- scorp84
- Niveau 7

- Messages : 415
- Enregistré le : mar. 04 nov. 2008 21:51
- Localisation : Avignon, France
- Status : Hors ligne
Re: [..] Enregistrement image provenant du presse papier
Ani : En fait c'est le contraire de _ImageToClip que je cherche à faire.
Il faut que l'image qui est dans le presse-papier soit enregistrée en tant qu'image sur le disque dur.
Je continue à chercher
Merci pour ton aide.
Amicalement.
BM
Il faut que l'image qui est dans le presse-papier soit enregistrée en tant qu'image sur le disque dur.
Je continue à chercher
Merci pour ton aide.
Amicalement.
BM
-
ani
- Niveau 11

- Messages : 1826
- Enregistré le : lun. 23 juil. 2007 12:31
- Localisation : Bureau
- Status : Hors ligne
Re: [..] Enregistrement image provenant du presse papier
ok 
donc en reprenant ton exemple
bonne continuation 
donc en reprenant ton exemple
► Afficher le texte
-
GaRydelaMer
- Niveau 7

- Messages : 450
- Enregistré le : mer. 18 mars 2009 22:12
- Localisation : Montpellier
- Status : Hors ligne
Re: [..] Enregistrement image provenant du presse papier
Merci Ani
j'etais aussi partis sur le forum Anglais et trouvé comme toi les fonctions de copy d'image vers le clipBoard.
Mais tu as fait plus vite que moi et j'en etais pas encore la ou tu es passé.
j'etais aussi partis sur le forum Anglais et trouvé comme toi les fonctions de copy d'image vers le clipBoard.
Mais tu as fait plus vite que moi et j'en etais pas encore la ou tu es passé.
- scorp84
- Niveau 7

- Messages : 415
- Enregistré le : mar. 04 nov. 2008 21:51
- Localisation : Avignon, France
- Status : Hors ligne
Re: [..] Enregistrement image provenant du presse papier
Super !
Merci à tous les 2 pour votre aide précieuse et super rapide
Ani :
Quand j'exécute ta fonction et que l'image est créée la taille de l'image est à 0 (msgbox) et quand j'essaye d'ouvrir l'image, Windows me sort que l'image est endommagée ou corrompue
Est ce que le fait que je sois sous Vista puisse y changer quelque chose ?
Amicalement.
BM
Merci à tous les 2 pour votre aide précieuse et super rapide
Ani :
Quand j'exécute ta fonction et que l'image est créée la taille de l'image est à 0 (msgbox) et quand j'essaye d'ouvrir l'image, Windows me sort que l'image est endommagée ou corrompue
Est ce que le fait que je sois sous Vista puisse y changer quelque chose ?
Amicalement.
BM
-
ani
- Niveau 11

- Messages : 1826
- Enregistré le : lun. 23 juil. 2007 12:31
- Localisation : Bureau
- Status : Hors ligne
Re: [..] Enregistrement image provenant du presse papier
je ne peut répondre sur ce sujet (no vista),
mais peut-être en rajoutant #requireAdmin ?
mais peut-être en rajoutant #requireAdmin ?
- scorp84
- Niveau 7

- Messages : 415
- Enregistré le : mar. 04 nov. 2008 21:51
- Localisation : Avignon, France
- Status : Hors ligne
Re: [..] Enregistrement image provenant du presse papier
Bonjour,
Ani : j'ai essayé ton code sous XP et j'ai le même souci : la taille de l'image est à 0.
J'ai pourtant fait la mise à jour d'Autoit via "Check For Updates" et j'ai maintenant la version 3.3.6.1.
Ce qui est bizarre, c'est qu'avant, j'utilisais ce bout de code :
J'étais en version 3.3.0.0 et cela marchait nickel. Depuis que je suis passé dans la dernière version, cela ne fonctionne plus 
Tlem m'avait dit dans un autre post que ma syntaxe de _ScreenCapture_SaveImage n'était pas bonne. Mais tant que ça fonctionnait, je ne m'en était pas inquiété. j'ai essayé de la changer par rapport à la doc mais elle ne fonctionne toujours plus.
Je suis dans une impasse et je suis em##dé car j'en ai besoin pour mon boulot et du coup, plus rien ne marche
Pour ton code Ani, j'ai essayé sur 3 postes (2 sous XP et un sous vista) et même pour le dernier avec #requireAdmin, ça ne marche pas
Merci d'avance ++ à celui ou celle qui m'aidera à me sortir de ce problème
Amicalement.
BM
Ani : j'ai essayé ton code sous XP et j'ai le même souci : la taille de l'image est à 0.
J'ai pourtant fait la mise à jour d'Autoit via "Check For Updates" et j'ai maintenant la version 3.3.6.1.
Ce qui est bizarre, c'est qu'avant, j'utilisais ce bout de code :
► Afficher le texte
Tlem m'avait dit dans un autre post que ma syntaxe de _ScreenCapture_SaveImage n'était pas bonne. Mais tant que ça fonctionnait, je ne m'en était pas inquiété. j'ai essayé de la changer par rapport à la doc mais elle ne fonctionne toujours plus.
Je suis dans une impasse et je suis em##dé car j'en ai besoin pour mon boulot et du coup, plus rien ne marche
Pour ton code Ani, j'ai essayé sur 3 postes (2 sous XP et un sous vista) et même pour le dernier avec #requireAdmin, ça ne marche pas
Merci d'avance ++ à celui ou celle qui m'aidera à me sortir de ce problème
Amicalement.
BM
-
ani
- Niveau 11

- Messages : 1826
- Enregistré le : lun. 23 juil. 2007 12:31
- Localisation : Bureau
- Status : Hors ligne
Re: [..] Enregistrement image provenant du presse papier
Exact, mais ayant testé avec la v3.2.12.1 (qui fonctionne) ^^'
je viend de visionner, que çà soit l'include où même l'aide, y a pas mal de changement, donc dure dure .
D'apr!s l'aide pour récuperer les bytes (taille) du binaire faut utiliser @extended
Donc j'avais testé çà, il retournee bien la valeur (taille) mit en mémoire par l'image dans le clipboard,...
pour l'écriture bein là je bloque 
POUQUOI autant de changement grrrrrrrr
Alors ? mais vlà la soluce
SI tu tourne sous vista faudra pas oublier de rajouter #RequireAdmin
Résolution du probleme = ouvrir la fonction ouverture clipboard et d'utiliser la fonction GetDataEx au lei de GetData
voilàvoilà
bonne continuation et bonne lecture de la v3.3.6 .*
je viend de visionner, que çà soit l'include où même l'aide, y a pas mal de changement, donc dure dure .
D'apr!s l'aide pour récuperer les bytes (taille) du binaire faut utiliser @extended
Donc j'avais testé çà, il retournee bien la valeur (taille) mit en mémoire par l'image dans le clipboard,...
Code : Tout sélectionner
$hbinary....
if @error then return seterror(1,0,0)
$nSize = @extended
$hData = _MemGlobalAlloc($nSize)
$nImageSize = _MemGlobalSize($hData)
ConsoleWrite("Taille de l'image : " & $nImageSize & ' Bytes' & @CRLF)
$pImageBytes = _MemGlobalLock($hData)
......POUQUOI autant de changement grrrrrrrr
Alors ? mais vlà la soluce
SI tu tourne sous vista faudra pas oublier de rajouter #RequireAdmin
Résolution du probleme = ouvrir la fonction ouverture clipboard et d'utiliser la fonction GetDataEx au lei de GetData
► Afficher le texte
bonne continuation et bonne lecture de la v3.3.6 .*
- scorp84
- Niveau 7

- Messages : 415
- Enregistré le : mar. 04 nov. 2008 21:51
- Localisation : Avignon, France
- Status : Hors ligne
Re: [..] Enregistrement image provenant du presse papier
Ouf !
Merci Ani pour ton aide. t'es trop fort
Je commençais à devenir fou car mon script marchait sur une machine (qui était en 3.3.0.0) et pas sur les 2 autres. J'essayais de faire des modifs mais qui ne faisaient qu'empirer les choses et au final, plus rien ne fonctionnait
Mais maintenant grâce à toi tout est rentré dans l'ordre.
Je vais le réintrégrer dans mon script initial (avec envoi par email du compte rendu des applis qui tournent, du nom machine, utilisateur, adresses IP, adresse MAC, ...) je le mettrai en partage sur le forum.
Merci pour tout le temps passé à m'aider, que ce soit toi ou les autres.
Amicalement.
BM
Merci Ani pour ton aide. t'es trop fort
Je commençais à devenir fou car mon script marchait sur une machine (qui était en 3.3.0.0) et pas sur les 2 autres. J'essayais de faire des modifs mais qui ne faisaient qu'empirer les choses et au final, plus rien ne fonctionnait
Mais maintenant grâce à toi tout est rentré dans l'ordre.
Je vais le réintrégrer dans mon script initial (avec envoi par email du compte rendu des applis qui tournent, du nom machine, utilisateur, adresses IP, adresse MAC, ...) je le mettrai en partage sur le forum.
Merci pour tout le temps passé à m'aider, que ce soit toi ou les autres.
Amicalement.
BM
-
ani
- Niveau 11

- Messages : 1826
- Enregistré le : lun. 23 juil. 2007 12:31
- Localisation : Bureau
- Status : Hors ligne
Re: [R] Enregistrement image provenant du presse papier
En faite l'erreur provenait du clipgetdata si on lui demandé si la valeur retourné est égal à zero (en cas d'erreur, rien dans le presse papier), il le retourné 
voilàvoilà, rien de bizarre $_$"
tu peux aussi réduire la taille du screen (poids)
Exemple chez moi le fichier (screenshot) fait quand même 3Mo (pour le format *bmp) en 1024*768, le mieux serai *png non çà reviendrai à ± 150 ko (20fois moins) ?
la faudra passer par GDI surement
je teste 3/4 lignes pour convertir bmp => png
bonne continuation pour ton projet
voilàvoilà, rien de bizarre $_$"
tu peux aussi réduire la taille du screen (poids)
Exemple chez moi le fichier (screenshot) fait quand même 3Mo (pour le format *bmp) en 1024*768, le mieux serai *png non çà reviendrai à ± 150 ko (20fois moins) ?
la faudra passer par GDI surement
je teste 3/4 lignes pour convertir bmp => png
bonne continuation pour ton projet
- scorp84
- Niveau 7

- Messages : 415
- Enregistré le : mar. 04 nov. 2008 21:51
- Localisation : Avignon, France
- Status : Hors ligne
Re: [R] Enregistrement image provenant du presse papier
Sans vouloir abuser, je suis preneur si tu trouves pour le PNG 
Merci encore ++
Amicalement.
BM
Merci encore ++
Amicalement.
BM
-
ani
- Niveau 11

- Messages : 1826
- Enregistré le : lun. 23 juil. 2007 12:31
- Localisation : Bureau
- Status : Hors ligne
Re: [R] Enregistrement image provenant du presse papier
ok pour le moment je relis l'aide et les includes donc 
Pour revenir au sujet soit on utilise l'exemple fournit plus haut,
plus complexe mais bon
ou tout simplement avec la fonction _ClipBoard_GetData
Exemple
voilàvoilà
pour la conversion, je pense que le clipboard par defaut c'est bmp
je part a la recherche de l'entete *png
Sur c'est avec _GDIPLUS_ mais bon
Pour revenir au sujet soit on utilise l'exemple fournit plus haut,
plus complexe mais bon
ou tout simplement avec la fonction _ClipBoard_GetData
Exemple
► Afficher le texte
pour la conversion, je pense que le clipboard par defaut c'est bmp
je part a la recherche de l'entete *png
Sur c'est avec _GDIPLUS_ mais bon
