Page 1 sur 1

[R] Capture avec double écran

Posté : mar. 11 août 2009 14:46
par scorp84
Bonjour,

Je me permets de vous solliciter de nouveau après avoir cherché en vain la solution sur le forum ou chez notre ami Google.

Nous utilisons au travail un progiciel qui génère pas mal de bugs et je cherche à développer un script qui me permette au clic sur un raccourci dans la barre de lancement rapide de pouvoir m'envoyer par mail la capture écran.

Jusque là, pas de problème avec la fonction "_ScreenCapture_Capture" et "_INetSmtpMailCom".

Par contre là où je rencontre un problème c'est que la plupart des postes sont en double écran et la fonction "_ScreenCapture_Capture" ne permet pas de définir quel est l'écran à capturer.

J'ai essayer d'additionner la taille écran 2*1024 et 2*768 mais cela ne fonctionne pas.

J'ai essayer de chercher dans l'aide d'Autoit mais je n'ai pas trouvé comment définir s'il y a un double écran et si oui, lui indiquer le moniteur à capturer.

En espérant avoir été assez clair :-)

Merci d'avance pour votre aide.

Amicalement.

BM

Re: [..] Capture avec double écran

Posté : mar. 11 août 2009 15:26
par Iste
Ya surement une solution pour le dualview, mais juste au cas ou, ou en attendant, tu peux aussi simuler l'appuis de la touche PrtSc, lancer paint, coller et enregistrer ^^'

Re: [..] Capture avec double écran

Posté : mar. 11 août 2009 16:18
par scorp84
Bonjour,

J'ai essayé d'utiliser la fonction Send("{PRINTSCREEN}") pour faire la capture écran mais là où j'ai pêché, c'est pour enregistrer le contenu du presse papier en tant qu'image.

J'ai utilisé ClipGet() mais ça ne doit pas être la bonne fonction car je n'obtiens rien dans le presse papier alors que quand je copie du texte, cela fonctionne.

Et le deuxième souci est qu'avec PRINTSCREEN, j'obtiens une image très grande alors que je préférerai en obtenir une de chaque écran.

Mais bon, si quelqu'un connait un moyen avec PRINTSCREEN, je suis preneur :-)

Merci d'avance.

Amicalement.

BM

Re: [..] Capture avec double écran

Posté : mar. 11 août 2009 21:53
par Tlem
J'ai trouvé deux liens intéressants :
- http://www.autoitscript.com/forum/index ... t&p=482883
- http://www.autoitscript.com/forum/index ... t&p=146011

Le dernier lien fait appel à une dll spécifique (a voir). Le lien de la dll est mort, mais on peut la trouver ici : http://www.autoitscript.com/forum/index ... t&p=340910

Bon courage. ;)

Re: [..] Capture avec double écran

Posté : mar. 11 août 2009 22:52
par scorp84
Bonsoir,

Une fois de plus un grand merci pour votre aide :-)

Je regarde ça demain et vous tiens au courant de ce que j'aurai réussi à faire.

Amicalement.

BM

Re: [..] Capture avec double écran

Posté : mer. 12 août 2009 14:25
par scorp84
Bonjour,

J'ai essayé les 2 pistes.

En premier, celle avec la DLL "captdll.dll" :

Code : Tout sélectionner

DllCall("captdll.dll", "int", "CaptureRegion", "str", "dump.jpg", "int", 0, "int", 0, "int", (@DesktopWidth*2), "int", @DesktopHeight, "int", 100)
 
Elle fonctionne bien mais me fait la même chose que Send("{PRINTSCREEN}"). C'est à dire qu'elle me fait une seule image de 2048 x 768 avec les 2 écrans.

Ensuite j'ai essayé "Ctrl+printscreen" et "Alt+printscreen" du second exemple. Le premier capture les 2 écrans et le second capture la fenêtre active (j'aurai encore appris quelque chose :-)

Il me faudrait donc arriver à soit découper l'image en 2048 en 2, soit arriver à enregistrer en tant qu'image le presse papier après avoir envoyé l'ordre "Alt+printscreen".

Je vais chercher sur le forum et sur Internet voir si je trouve comment faire.

Si je trouve, je mettrai ce que j'ai trouvé.

Merci encore pour votre aide.

Amicalement.

BM

Re: [..] Capture avec double écran

Posté : mer. 12 août 2009 18:24
par orax
Je suppose que vous n'aviez pas laissé "(@DesktopWidth*2)" dans votre code ; parce que j'ai l'impression que ça prendra les 2 écrans dans ce cas.

Autre chose, j'avais vu ça : http://msdn.microsoft.com/en-us/library ... 85%29.aspx, et d'après ce que je vois il faudrait modifier un peu la fonction _ScreenCapture_Capture pour capturer l'écran que l'on souhaite. Mais évidemment, vu que je ne peux pas tester, ce n'est peut-être pas une bonne piste...

Re: [..] Capture avec double écran

Posté : mer. 12 août 2009 19:24
par scorp84
Bonsoir,

Si au départ j'avais laissé @DesktopWidth*2 mais en fait sur l'image il y avait l'écran principal et le reste était noir, du coup, je l'avais enlevé.

Merci pour cette autre piste. Je vais étudier ça demain et vous tiendrai au courant.

Savez vous s'il est possible de transformer l'image qui est dans le presse-papier après le Send("{PRINTSCREEN}") en un fichier ?

J'ai cherché mais je n'ai pas réussi à trouver la solution.

Merci encore à tous pour votre aide très précieuse :-)

Amicalement.

BM

Re: [..] Capture avec double écran

Posté : mer. 12 août 2009 19:33
par Iste
Apres avoir galéré pour y arriver seul, j'ai regardé sur le fofo anglais, et tadaaaa
http://www.autoitscript.com/forum/index ... ntry671709

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#Include <GDIPlus.au3>
#include <ClipBoard.au3>
#include <ScreenCapture.au3>

Send("{PRINTSCREEN}")


$hGUI=GUICreate("WW")
_ClipBoard_Open ($hGUI)
$fred=ClipGet()
    if @error = 2 Then
        $hBitmap=_ClipBoard_GetData ($CF_BITMAP )      
        _ScreenCapture_SaveImage(@ScriptDir & '\Testt.bmp', $hBitmap)
    EndIf
Exit
testé et fonctionel, avec un écran du moins ^^

Re: [..] Capture avec double écran

Posté : jeu. 13 août 2009 09:26
par scorp84
Bonjour,

Vous êtes trop forts :-)

Cette dernière piste marche nickel pour un écran. Je me suis permis de modifier l'extension de BMP à GIF car avec le double écran, le poids de l'image était de 4.6 Mo alors qu'en GIF elle est de 100 Ko (ce qui est mieux pour envoyer par mail :-)

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#Include <GDIPlus.au3>
#include <ClipBoard.au3>
#include <ScreenCapture.au3>

Send("{PRINTSCREEN}")


$hGUI=GUICreate("WW")
_ClipBoard_Open ($hGUI)
$fred=ClipGet()
    if @error = 2 Then
        $hBitmap=_ClipBoard_GetData ($CF_BITMAP )
        _ScreenCapture_SaveImage(@ScriptDir & '\Testt[b].gif[/b]', $hBitmap)
    EndIf
Exit
 
Il me reste à explorer la piste de Orax pour définir l'écran et le tour est joué.

Merci encore à tous pour votre aide.

Amicalement.

BM

Re: [..] Capture avec double écran

Posté : jeu. 13 août 2009 10:53
par Tlem
Pour le format, je vous conseil plutôt PNG.
C'est le double du GIF, mail la définition est supérieure. ;)

Re: [..] Capture avec double écran

Posté : ven. 14 août 2009 23:41
par scorp84
Bonsoir,

Merci pour ce nouveau conseil :-)

Voici de manière bien modeste mon script qui me permet de faire une capture écran à l'exécution du script et de :
- la stocker sur le poste client dans le répertoire c:\BUGS
- l'envoyer par mail en PJ avec un mini rapport (date, heure, nom machine, nom utilisateur, ...)

La fonction de capture écran découle des conseils de ce fil et la fonction d'envoi du mail a été trouvé dans ce forum (http://www.autoitscript.fr/forum/viewto ... =20&t=822)).

Elle est bien sûr perfectible mais elle fonctionne et peut peut être servir à d'autres.
► Afficher le texte
Merci beaucoup à tous ceux qui ont bien voulu prendre du temps pour m'aider pour ce problème.

Amicalement.

Bertrand