Page 1 sur 1

[R] Enregistrement image provenant du presse papier

Posté : jeu. 22 avr. 2010 14:20
par scorp84
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

Re: [..] Enregistrement image provenant du presse papier

Posté : jeu. 22 avr. 2010 14:52
par GaRydelaMer
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.

Re: [..] Enregistrement image provenant du presse papier

Posté : jeu. 22 avr. 2010 15:34
par scorp84
C'est bien ça mon problème :-(

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)
 
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

Re: [..] Enregistrement image provenant du presse papier

Posté : jeu. 22 avr. 2010 16:11
par scorp84
...

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)
 
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

Re: [..] Enregistrement image provenant du presse papier

Posté : jeu. 22 avr. 2010 16:49
par ani
salut

regarde le lien suivant : http://www.autoitscript.com/forum/index ... opic=70237

bonne continuation ;)

Re: [..] Enregistrement image provenant du presse papier

Posté : jeu. 22 avr. 2010 16:53
par scorp84
Salut Ani !

Merci pour l'info :-)

Je regarde ça de suite.

Amicalement.

BM

Re: [..] Enregistrement image provenant du presse papier

Posté : jeu. 22 avr. 2010 17:04
par scorp84
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

Re: [..] Enregistrement image provenant du presse papier

Posté : jeu. 22 avr. 2010 17:24
par ani
ok ;)

donc en reprenant ton exemple
► Afficher le texte
bonne continuation ;)

Re: [..] Enregistrement image provenant du presse papier

Posté : jeu. 22 avr. 2010 17:56
par GaRydelaMer
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é.

Re: [..] Enregistrement image provenant du presse papier

Posté : ven. 23 avr. 2010 11:00
par scorp84
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

Re: [..] Enregistrement image provenant du presse papier

Posté : sam. 24 avr. 2010 15:18
par ani
je ne peut répondre sur ce sujet (no vista),
mais peut-être en rajoutant #requireAdmin ?

Re: [..] Enregistrement image provenant du presse papier

Posté : lun. 26 avr. 2010 13:44
par scorp84
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 :
► Afficher le texte
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

Re: [..] Enregistrement image provenant du presse papier

Posté : mar. 27 avr. 2010 05:26
par ani
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,...

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)
......
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 ;)
► Afficher le texte
voilàvoilà
bonne continuation et bonne lecture de la v3.3.6 .* ;)

Re: [..] Enregistrement image provenant du presse papier

Posté : mar. 27 avr. 2010 14:03
par scorp84
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

Re: [R] Enregistrement image provenant du presse papier

Posté : mar. 27 avr. 2010 14:20
par ani
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 :D

je teste 3/4 lignes pour convertir bmp => png ;)

bonne continuation pour ton projet

Re: [R] Enregistrement image provenant du presse papier

Posté : mar. 27 avr. 2010 16:20
par scorp84
Sans vouloir abuser, je suis preneur si tu trouves pour le PNG ;-)

Merci encore ++

Amicalement.

BM

Re: [R] Enregistrement image provenant du presse papier

Posté : mar. 27 avr. 2010 19:15
par ani
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
► Afficher le texte
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 :)