[Ex] Faire des screens et les regarder
Posté : dim. 31 oct. 2010 22:50
par bloodwolff
Voulant me pratiquer au langage autoit j'ai décidé de faire un script permettant de prendre des "photo" de l'écran
Oui des programmes du genre existe et probablement beaucoup mieux mais tant qu'à l'avoir fait je vais le partager
Ps: Même si je ne suis pas dans la bonne section, j'en profite pour demander comment redimensionner et recadrer une image
Oui des programmes du genre existe et probablement beaucoup mieux mais tant qu'à l'avoir fait je vais le partager
Je suis ouvert à vos commentaires et vos propositions d'ajouts de fonctionsFonction
==> Prendre une photo de l'écran avec la touche "impr écran"
==> Visionner les images pris avec le script où n'importe quel autre
==> Permet de renommer , supprimer rapidement les images
==> Affiche les images sans les déformer (oui c'est important)
==> Permet de les afficher en plein écran
==> Affiche la résolution de l'image
==> La fonction de capture d'image fonctionne même si la Gui est fermé (Pour arrêter complètement le script ou ré-afficher la fenêtre , il faut cliquer sur l'icône dans la barre des taches)
==> Possibilité d'afficher/cacher les options rapidement
Option
==> Choisir le dossier où les images sont sauvegardé
==> Choisir d'afficher ou non le curseur sur les images
==> Choisir la qualité des images
Bientôt
==> Possibilité de naviguer entre les images avec les flèche en mode plein écran et ajout du mode diaporama
==> Permettre au script d'ouvrir au démarrage
==> Possibilité Changer la touche par default "impr écran" pour la capture d'image
Ps: Même si je ne suis pas dans la bonne section, j'en profite pour demander comment redimensionner et recadrer une image

► Afficher le texte
Code : Tout sélectionner
#Include <ScreenCapture.au3>
#include <GDIPlus.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <SliderConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Include <Array.au3>
Opt("TrayMenuMode", 1)
Opt("GUIResizeMode", $GUI_DOCKALL)
Opt("TrayOnEventMode",1)
If IniRead ( "screen.ini", "Configuration", "demarrage", "" ) = "" Then _
IniWrite( "screen.ini", "Configuration", "demarrage", $gui_unchecked)
If IniRead ( "screen.ini", "Configuration", "curseur", "" ) = "" Then _
IniWrite( "screen.ini", "Configuration", "curseur", $gui_unchecked)
If IniRead ( "screen.ini", "Configuration", "qualite", "" ) = "" Then _
IniWrite( "screen.ini", "Configuration", "qualite", 100)
If IniRead ( "screen.ini", "Configuration", "savefolder", "" ) = "" Then _
IniWrite( "screen.ini", "Configuration", "savefolder", FileSelectFolder _
("Dossier où les images seront enregistrées",@ScriptDir,1) & "\")
Global $filefolder=IniRead ( "screen.ini", "Configuration", "savefolder", "" )
Global $qualite=IniRead ( "screen.ini", "Configuration", "qualite", 100)
Global $curseur=IniRead ( "screen.ini", "Configuration", "curseur", $gui_unchecked)
Global $demarrage=IniRead ( "screen.ini", "Configuration", "demarrage", $gui_unchecked)
Global $quitterboucle=False
_ScreenCapture_SetJPGQuality($qualite)
TraySetIcon("", -1)
TraySetClick("27")
$MenuItem2 = TrayCreateItem("Voir la Fenêtre")
TrayItemSetOnEvent ( $MenuItem2, "_create_gui" )
TrayCreateItem("")
$MenuItem8 = TrayCreateItem("Fermer le programme")
TrayItemSetOnEvent ( $MenuItem8, "_exit" )
TraySetState()
While 1
_main()
WEnd
Func _Main()
$position=1
$liste_image = listeimg()
$resolution=tailleimg($liste_image[1])
$option=False
$Comboselect=$liste_image[1]
#Region ### START Koda GUI section ### Form=c:\users\max\documents\téléchargement\koda_1.7.3.0\forms\form1.kxf
$Form1 = GUICreate("Enregistreur d'écran", 589, 332, 55, 25)
$Button1 = GUICtrlCreateButton("Actualiser", 488, 104, 91, 25)
$Button3 = GUICtrlCreateButton("Précédente", 488, 136, 91, 25)
$Button4 = GUICtrlCreateButton("Supprimer", 488, 40, 91, 25)
$Checkbox1 = GUICtrlCreateCheckbox("Voir le curseur", 16, 384, 97, 17)
GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif")
$Pic1 = GUICtrlCreatePic($filefolder & $liste_image[$position], $resolution[2], $resolution[3], $resolution[0], $resolution[1], -1)
$Button2 = GUICtrlCreateButton("Renommer", 488, 72, 91, 25)
$Button5 = GUICtrlCreateButton("Suivante", 488, 168, 91, 25)
$Label1 = GUICtrlCreateLabel(StringLeft($liste_image[$position],StringLen($liste_image[$position])-4), 16, 0, 464, 30, $SS_CENTER)
GUICtrlSetFont(-1, 14, 800, 0, "Palatino Linotype")
$Combo1 = GUICtrlCreateCombo("", 168, 304, 313, 25, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL,$WS_VSCROLL))
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$Input1 = GUICtrlCreateInput($filefolder, 16, 336, 201, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_READONLY))
$Button6 = GUICtrlCreateButton("...", 224, 336, 51, 25)
$Checkbox3 = GUICtrlCreateCheckbox("Lancer au démarrage", 16, 368, 121, 17)
GUICtrlSetFont(-1, 8, 400, 4, "MS Sans Serif")
$Slider1 = GUICtrlCreateSlider(272, 360, 150, 45)
GUICtrlSetData(-1, 100)
$Label2 = GUICtrlCreateLabel("Qualité", 320, 336, 46, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$Button7 = GUICtrlCreateButton("Plein écran", 488, 200, 91, 25)
$Button8 = GUICtrlCreateButton("Touche pour prendre screen", 152, 368, 99, 33, $BS_MULTILINE)
$Button9 = GUICtrlCreateButton("Voir les options (ON/OFF)", 16, 304, 147, 25)
$Button10 = GUICtrlCreateButton("Appliquer les changement", 504, 360, 75, 33, $BS_MULTILINE)
$Label3 = GUICtrlCreateLabel("Résolution", 488, 232, 96, 17, $SS_CENTER)
GUICtrlSetFont(-1, 8, 800, 4, "MS Sans Serif")
$Label4 = GUICtrlCreateLabel("X:", 488, 256, 94, 17)
$Label5 = GUICtrlCreateLabel("Y:", 488, 280, 94, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUICtrlSetState($Checkbox3,$GUI_DISABLE)
GUICtrlSetState($Button8,$GUI_DISABLE)
if $liste_image[1] = 'Aucune image trouvée.jpg' Then
GUICtrlSetState($Button2,$GUI_DISABLE)
GUICtrlSetState($Button3,$GUI_DISABLE)
GUICtrlSetState($Button4,$GUI_DISABLE)
GUICtrlSetState($Button5,$GUI_DISABLE)
GUICtrlSetState($Button7,$GUI_DISABLE)
GUICtrlSetState($Combo1,$GUI_DISABLE)
EndIf
$Comboselect=""
For $i=1 to $liste_image[0]
$Comboselect=$Comboselect & "|" & StringLeft($liste_image[$i],StringLen($liste_image[$i])-4)
Next
GUICtrlSetData($combo1,$comboselect,StringLeft($liste_image[1],StringLen($liste_image[1])-4))
$combochange=$liste_image[1]
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Button1
GUIDelete($Form1)
_main()
Case $Button2
$name=InputBox("Renommer","Quel nom voulez-vous lui donner?")
If $name <> "" Then
If StringRight($name,4) <> ".jpg" Then $name = $name & ".jpg"
FileMove($filefolder & $liste_image[$position], $filefolder & $name)
$liste_image[$position]=$name
GUICtrlSetData($Label1,StringLeft($liste_image[$position],StringLen($liste_image[$position])-4))
EndIf
Case $Button3
If $position=1 Then
$position=$liste_image[0]
Else
$position=$position-1
EndIf
$resolution=tailleimg($liste_image[$position])
GUICtrlDelete($Pic1)
$Pic1 = GUICtrlCreatePic($filefolder & $liste_image[$position], $resolution[2], $resolution[3], $resolution[0], $resolution[1], -1)
GUICtrlSetData($Label1,StringLeft($liste_image[$position],StringLen($liste_image[$position])-4))
GUICtrlSetData($combo1,$comboselect,StringLeft($liste_image[$position],StringLen($liste_image[$position])-4))
GUICtrlSetData($Label4,"X : " & $resolution[4])
GUICtrlSetData($Label5,"Y : " & $resolution[5])
Case $Button4
FileDelete($filefolder & $liste_image[$position])
If $liste_image[0] <> $position Then
For $i=$position to $liste_image[0]-1
$liste_image[$i]=$liste_image[$i+1]
Next
EndIf
ReDim $liste_image[$liste_image[0]]
$liste_image[0]=$liste_image[0]-1
$resolution=tailleimg($liste_image[$position])
GUICtrlDelete($Pic1)
$Pic1 = GUICtrlCreatePic($filefolder & $liste_image[$position], $resolution[2], $resolution[3], $resolution[0], $resolution[1], -1)
GUICtrlSetData($Label1,StringLeft($liste_image[$position],StringLen($liste_image[$position])-4))
GUICtrlSetData($combo1,$comboselect,StringLeft($liste_image[$position],StringLen($liste_image[$position])-4))
GUICtrlSetData($Label4,"X : " & $resolution[4])
GUICtrlSetData($Label5,"Y : " & $resolution[5])
Case $Button5
If $position=$liste_image[0] Then
$position=1
Else
$position=$position+1
EndIf
$resolution=tailleimg($liste_image[$position])
GUICtrlDelete($Pic1)
$Pic1 = GUICtrlCreatePic($filefolder & $liste_image[$position], $resolution[2], $resolution[3], $resolution[0], $resolution[1], -1)
GUICtrlSetData($Label1,StringLeft($liste_image[$position],StringLen($liste_image[$position])-4))
GUICtrlSetData($combo1,$comboselect,StringLeft($liste_image[$position],StringLen($liste_image[$position])-4))
GUICtrlSetData($Label4,"X : " & $resolution[4])
GUICtrlSetData($Label5,"Y : " & $resolution[5])
Case $Button6
GUICtrlSetData($Input1,FileSelectFolder("Dossier où les images seront enregistrées",@ScriptDir,1) & "\")
Case $Button7
MsgBox(0,"Plein écran","Appuyer sur ""Echap"" pour quitter le mode plein écran")
$resolution=tailleimg($liste_image[$position],@DesktopWidth,@DesktopHeight,0,0)
_GDIPlus_Startup ()
$handle=_GDIPlus_ImageLoadFromFile($filefolder & $liste_image[$position])
$hBitmap1 = _ScreenCapture_Capture("")
$hImage1 = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap1)
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage1)
_GDIPlus_GraphicsClear($hGraphic)
_GDIPlus_graphicsDrawImageRect($hGraphic, $handle,$resolution[2],$resolution[3],$resolution[0],$resolution[1])
_GDIPlus_ImageSaveToFile($hImage1,@TempDir & "\splash.jpg")
_GDIPlus_GraphicsDispose ($hGraphic)
_GDIPlus_ImageDispose($hImage1)
_WinAPI_DeleteObject($hBitmap1)
_GDIPlus_ImageDispose($handle)
_GDIPlus_ShutDown ()
SplashImageOn("",@TempDir & "\splash.jpg",@DesktopWidth,@DesktopHeight,0,0,1)
Do
HotKeySet("{esc}","Quitter_plein")
Sleep(10)
Until FileExists(@TempDir & "\splash.jpg") <> 1
Case $Button9
$Pos = WinGetPos($Form1)
If not $option Then
WinMove($Form1, "", $Pos[0], $Pos[1], $Pos[2], $Pos[3] + 79)
$option=True
GUICtrlSetState($Checkbox1,$curseur)
GUICtrlSetState($Checkbox3,$demarrage)
GUICtrlSetData($Slider1,$qualite)
ElseIf $option Then
WinMove($Form1, "", $Pos[0], $Pos[1], $Pos[2], $Pos[3] - 79)
$option=False
EndIf
Case $Button10
IniWrite( "screen.ini", "Configuration", "savefolder",GUICtrlRead($Input1))
$filefolder=GUICtrlRead($Input1)
IniWrite( "screen.ini", "Configuration", "demarrage",GUICtrlRead($Checkbox3))
$demarrage=GUICtrlRead($Checkbox3)
IniWrite( "screen.ini", "Configuration", "curseur",GUICtrlRead($Checkbox1))
$curseur=GUICtrlRead($Checkbox1)
IniWrite( "screen.ini", "Configuration", "qualite",GUICtrlRead($Slider1))
$qualite=GUICtrlRead($Slider1)
_ScreenCapture_SetJPGQuality($qualite)
Case $GUI_EVENT_CLOSE
GUIDelete($Form1)
Do
HotKeySet ( "{PRINTSCREEN}" , "Screen" )
Sleep(10)
Until $quitterboucle
$quitterboucle=False
ExitLoop
EndSwitch
If $combochange <> GUICtrlRead($Combo1) Then
$combochange = GUICtrlRead($Combo1)
For $i=1 to $liste_image[0]
If StringLeft($liste_image[$i],StringLen($liste_image[$i])-4)=$combochange Then
$position=$i
$resolution=tailleimg($liste_image[$position])
GUICtrlDelete($Pic1)
$Pic1 = GUICtrlCreatePic($filefolder & $liste_image[$position], $resolution[2], $resolution[3], $resolution[0], $resolution[1], -1)
GUICtrlSetData($Label1,StringLeft($liste_image[$position],StringLen($liste_image[$position])-4))
GUICtrlSetData($Label4,"X : " & $resolution[4])
GUICtrlSetData($Label5,"Y : " & $resolution[5])
EndIf
Next
EndIf
HotKeySet ( "{PRINTSCREEN}" , "Screen" )
Sleep(10)
WEnd
EndFunc
Func Screen()
$name = @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & "H" & @MIN & "MIN" & @SEC
If $curseur=$gui_checked Then $screenparam=1
If $curseur=$gui_unchecked Then $screenparam=0
If FileExists($filefolder)<>1 Then DirCreate($filefolder)
_ScreenCapture_Capture($filefolder & $name & ".jpg" _
,0,0,-1,-1,$screenparam)
EndFunc
Func listeimg()
dim $liste_image[1]
$search=FileFindFirstFile($filefolder & "*.jpg")
$image=FileFindNextFile($search)
While @error <> 1
_ArrayAdd($liste_image,$image)
$image=FileFindNextFile($search)
WEnd
$liste_image[0]=UBound($liste_image)-1
If $liste_image[0] = 0 Then
_ArrayAdd($liste_image,'Aucune image trouvée.jpg')
$liste_image[0]=1
EndIf
Return $liste_image
EndFunc
Func tailleimg($image,$1=460,$2=268,$3=16,$4=32)
Dim $resolution[6]
_GDIPlus_Startup ()
$handle=_GDIPlus_ImageLoadFromFile($filefolder & $image)
$resolution[4] = _GDIPlus_ImageGetWidth($handle)
$resolution[5] = _GDIPlus_ImageGetHeight($handle)
_GDIPlus_ImageDispose($handle)
_GDIPlus_ShutDown ()
If $resolution[4]/$resolution[5] = $1/$2 Then
$resolution[0]=$1
$resolution[1]=$2
$resolution[2]=$3
$resolution[3]=$4
ElseIf $resolution[4]/$resolution[5] > $1/$2 Then
$resolution[1]=$1/($resolution[4]/$resolution[5])
$resolution[0]=$1
$resolution[2]=$3
$resolution[3]=(($2-$resolution[1])/2)+$4
ElseIf $resolution[4]/$resolution[5] < $1/$2 Then
$resolution[0]=$2*($resolution[4]/$resolution[5])
$resolution[1]=$2
$resolution[2]=(($1-$resolution[0])/2)+$3
$resolution[3]=$4
EndIf
Return $resolution
EndFunc
Func Quitter_plein()
SplashOff()
FileDelete(@TempDir & "\splash.jpg")
EndFunc
Func _create_gui()
If WinExists("Enregistreur d'écran") Then
WinSetState("Enregistreur d'écran","",@SW_RESTORE & @SW_ENABLE & @SW_SHOW)
WinFlash("Enregistreur d'écran")
WinActivate("Enregistreur d'écran")
Else
$quitterboucle=True
EndIf
EndFunc
Func _exit()
Exit
EndFunc