[R] Enregistrement image provenant du presse papier

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
scorp84
Niveau 7
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

#1

Message 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
Modifié en dernier par scorp84 le mar. 27 avr. 2010 14:03, modifié 3 fois.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

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

#2

Message 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.
Avatar du membre
scorp84
Niveau 7
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

#3

Message 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
Avatar du membre
scorp84
Niveau 7
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

#4

Message 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
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

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

#5

Message par ani »

salut

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

bonne continuation ;)
Avatar du membre
scorp84
Niveau 7
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

#6

Message par scorp84 »

Salut Ani !

Merci pour l'info :-)

Je regarde ça de suite.

Amicalement.

BM
Avatar du membre
scorp84
Niveau 7
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

#7

Message 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
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

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

#8

Message par ani »

ok ;)

donc en reprenant ton exemple
► Afficher le texte
bonne continuation ;)
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

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

#9

Message 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é.
Avatar du membre
scorp84
Niveau 7
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

#10

Message 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
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

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

#11

Message par ani »

je ne peut répondre sur ce sujet (no vista),
mais peut-être en rajoutant #requireAdmin ?
Avatar du membre
scorp84
Niveau 7
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

#12

Message 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
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

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

#13

Message 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 .* ;)
Avatar du membre
scorp84
Niveau 7
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

#14

Message 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
ani
Niveau 11
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

#15

Message 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
Avatar du membre
scorp84
Niveau 7
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

#16

Message par scorp84 »

Sans vouloir abuser, je suis preneur si tu trouves pour le PNG ;-)

Merci encore ++

Amicalement.

BM
ani
Niveau 11
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

#17

Message 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 :)
Répondre