un petit logiciel pour faire des copies d'écran

vous pouvez le télécharger ici
http://www.lsi-dev.com/index.php?mod=ar ... ires&id=86
et vous trouverez le code plus bas

Une petite description s'impose
Le codeTout d'abord, il faut lancer le logiciel![]()
Vous configurez le format d'enregistrement :
- BMP
- PNG
- JPG (avec réglage de la qualité)
Vous choisissez ensuite ce que vous souhaitez capturer :
- Tout l'écran
- L'écran sans la barre des tâches
- La fenêtre sous la souris
- Uniquement le contenu de la fenêtre sous la souris (donc sans la barre de titre et les bordures)
- Uniquement l'objet sous la souris (Par exemple, si la souris est au dessus d'un bouton, vous ne capturer que le bouton)
Et c'est finis ! Vous pouvez réduire la fenêtre, elle va se cacher à coté de l'horloge.
Ensuite, quand vous appuyez sur la touche "Imprime écran", vous verrez la zone capturer s'afficher avec un quadrillage noir et blanc.
La capture vous convient, vous faites un clic gauche sur l'aperçu pour l'enregistrer. Elle ne vous convient pas, un clic droit et elle est annulée.
Les images s'enregistre dans le même dossier que le programme.
Et quand vous avez finis, vous quittez le programme.
(normalement, il doit pas y avoir de fonction de mes UserLibs)
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 4.41
;
; Explication du programme :
; Faire une copie d'écran
UsePNGImageEncoder()
UseJPEGImageEncoder()
; UsePNGImageDecoder()
; UseJPEGImageDecoder()
Global Format, Qualite, Type
Procedure CopieEcran(Format, Qualite, Type)
Protected Ecran.RECT, Nb, Image, Image2, WinMouse, Fenetre.RECT, FenetreHG.POINT
Ecran_Largeur = GetSystemMetrics_(#SM_CXSCREEN)
Ecran_Hauteur = GetSystemMetrics_(#SM_CYSCREEN)
DC = GetDC_(0)
Image2 = CreateImage(#PB_Any, Ecran_Largeur, Ecran_Hauteur)
Dessin = StartDrawing(ImageOutput(Image2))
BitBlt_(Dessin, 0, 0, Ecran_Largeur, Ecran_Hauteur, DC, 0, 0, #SRCPAINT | $40000000)
StopDrawing()
ReleaseDC_(0, DC)
; On découpe l'image suivant le Type
Select Type
Case 0
; Tout l'écran
Fenetre\left = 0
Fenetre\right = Ecran_Largeur
Fenetre\top = 0
Fenetre\bottom = Ecran_Hauteur
Case 1
; L'écran sans la barre des taches
SystemParametersInfo_(#SPI_GETWORKAREA, 0, @Fenetre.RECT, 0)
Case 2
; La fenêtre sous la souris
WinMouse = WindowFromPoint_(DesktopMouseX() | DesktopMouseY() << 32)
Repeat
WinParent = GetParent_(WinMouse)
If WinParent
WinMouse = WinParent
EndIf
Until WinParent = 0
GetWindowRect_(WinMouse, Fenetre.RECT)
Case 3
; Uniquement le contenu de la fenêtre sous la souris
WinMouse = WindowFromPoint_(DesktopMouseX() | DesktopMouseY() << 32)
Repeat
WinParent = GetParent_(WinMouse)
If WinParent
WinMouse = WinParent
EndIf
Until WinParent = 0
GetClientRect_(WinMouse, Fenetre.RECT) : ClientToScreen_(WinMouse, FenetreHG.POINT)
Fenetre\left + FenetreHG\X
Fenetre\right + FenetreHG\X
Fenetre\top + FenetreHG\Y
Fenetre\bottom + FenetreHG\Y
Case 4
; Uniquement l'objet sous la souris
WinMouse = WindowFromPoint_(DesktopMouseX() | DesktopMouseY() << 32)
; WinAncestor = GetAncestor_(WinMouse, #GA_PARENT)
; If WinAncestor
; WinMouse = WinAncestor
; EndIf
GetClientRect_(WinMouse, Fenetre.RECT) : ClientToScreen_(WinMouse, FenetreHG.POINT)
Fenetre\left + FenetreHG\X
Fenetre\right + FenetreHG\X
Fenetre\top + FenetreHG\Y
Fenetre\bottom + FenetreHG\Y
EndSelect
If Fenetre\left < 0 : Fenetre\left = 0 : EndIf
If Fenetre\top < 0 : Fenetre\top = 0 : EndIf
If Fenetre\right > ImageWidth(Image2) : Fenetre\right = ImageWidth(Image2) : EndIf
If Fenetre\bottom > ImageHeight(Image2) : Fenetre\bottom = ImageHeight(Image2) : EndIf
Image = GrabImage(Image2, #PB_Any, Fenetre\left, Fenetre\top, Fenetre\right - Fenetre\left, Fenetre\bottom - Fenetre\top)
FreeImage(Image2)
If IsImage(Image)
Visualiser = OpenWindow(#PB_Any, Fenetre\left, Fenetre\top, Fenetre\right - Fenetre\left, Fenetre\bottom - Fenetre\top, "Visualisation", #PB_Window_BorderLess)
If Visualiser
StickyWindow(Visualiser, 1)
Image2 = CopyImage(Image, #PB_Any)
StartDrawing(ImageOutput(Image2))
DrawingMode(#PB_2DDrawing_AlphaBlend)
For X = 0 To Fenetre\right - Fenetre\left - 1 Step 8
For Y = 0 To Fenetre\bottom - Fenetre\top - 1 Step 8
If ((X + Y) / 8) & %1 = 1
Box(X, Y, 8, 8, $40FFFFFF)
Else
Box(X, Y, 8, 8, $40000000)
EndIf
Next
Next
StopDrawing()
Gadget = ImageGadget(#PB_Any, 1, 1, 0, 0, ImageID(Image2))
GadgetToolTip(Gadget, "Clic gauche = Sauver / Clic droit = Annuler")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
If EventGadget() = Gadget
Select EventType()
Case #PB_EventType_LeftClick
Enregistrer = 1
Case #PB_EventType_RightClick
Enregistrer = -1
EndSelect
EndIf
EndIf
Until Enregistrer <> 0
CloseWindow(Visualiser)
FreeImage(Image2)
EndIf
; On enregistre l'image
If Enregistrer > 0
Nb = 0
Repeat
Nb + 1
Until FileSize("Copie d'écran " + RSet(Str(Nb), 4, "0") + ".bmp") = -1 And FileSize("Copie d'écran " + RSet(Str(Nb), 4, "0") + ".png") = -1 And FileSize("Copie d'écran " + RSet(Str(Nb), 4, "0") + ".jpg") = -1
Select Format
Case 0
Nom.s = "Copie d'écran " + RSet(Str(Nb), 4, "0") + ".bmp"
SaveImage(Image, Nom, #PB_ImagePlugin_BMP)
Case 1
Nom.s = "Copie d'écran " + RSet(Str(Nb), 4, "0") + ".png"
SaveImage(Image, Nom, #PB_ImagePlugin_PNG)
Case 2
Nom.s = "Copie d'écran " + RSet(Str(Nb), 4, "0") + ".jpg"
SaveImage(Image, Nom, #PB_ImagePlugin_JPEG, Qualite)
EndSelect
SetGadgetText(5, Nom)
MessageBeep_(#MB_OK)
EndIf
FreeImage(Image)
EndIf
EndProcedure
Global KeyboardHook
Procedure LowLevelKeyboardProc(nCode.l, wParam.l, lParam.l)
If nCode=#HC_ACTION
Select wParam
Case #WM_KEYDOWN
Case #WM_KEYUP
vkCode = PeekL(lParam)
If vkCode = 44
CopieEcran(Format, Qualite, Type)
EndIf
EndSelect
EndIf
ProcedureReturn CallNextHookEx_(KeyboardHook, nCode, wParam, lParam)
EndProcedure
Procedure AddKeyboardHook()
If KeyboardHook = 0
KeyboardHook = SetWindowsHookEx_(#WH_KEYBOARD_LL, @LowLevelKeyboardProc(), GetModuleHandle_(0), 0)
EndIf
ProcedureReturn KeyboardHook
EndProcedure
Procedure RemoveKeyboardHook()
If KeyboardHook
UnhookWindowsHookEx_(KeyboardHook)
KeyboardHook = 0
EndIf
EndProcedure
; Format
; 0 = BMP
; 1 = PNG
; 2 = JPG
Procedure AffichageQualite(Format)
If Format = 2
HideGadget(2, 0)
HideGadget(3, 0)
Else
HideGadget(2, 1)
HideGadget(3, 1)
EndIf
EndProcedure
; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 300, 196, "Copie d'écran", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
End
EndIf
StickyWindow(0, 1)
LoadFont(0, "Tahoma", 8)
SetGadgetFont(#PB_Default, FontID(0))
LoadFont(1, "Tahoma", 8, #PB_Font_Bold)
TextGadget(0, 0, 0, 150, 16, " Format de l'image :") : SetGadgetFont(0, FontID(1))
ComboBoxGadget(1, 0, 16, 150, 24)
AddGadgetItem(1, 0, "Bmp")
AddGadgetItem(1, 1, "Png")
AddGadgetItem(1, 2, "Jpg")
TextGadget(2, 150, 0, 150, 16, " Qualité de l'image :") : SetGadgetFont(2, FontID(1))
ComboBoxGadget(3, 150, 16, 150, 24)
For n = 1 To 10
AddGadgetItem(3, n - 1, Str(n))
Next
OpenPreferences("Copie d'écran.ini")
Format = ReadPreferenceLong("Format", 1)
Qualite = ReadPreferenceLong("Qualité", 10)
Type = ReadPreferenceLong("Type", 0)
ClosePreferences()
SetGadgetState(1, Format)
SetGadgetState(3, Qualite - 1)
AffichageQualite(Format)
TextGadget(7, 0, 50, 300, 16, " Type de copie d'écran :") : SetGadgetFont(7, FontID(1))
OptionGadget(10, 0, 66, 300, 16, "Tout l'écran")
OptionGadget(11, 0, 82, 300, 16, "L'écran sans la barre des taches")
OptionGadget(12, 0, 98, 300, 16, "La fenêtre sous la souris")
OptionGadget(13, 0, 114, 300, 16, "Uniquement le contenu de la fenêtre sous la souris")
OptionGadget(14, 0, 130, 300, 16, "Uniquement l'objet sous la souris")
SetGadgetState(10 + Type, 1)
TextGadget(4, 0, 156, 50, 16, " Image :") : SetGadgetFont(4, FontID(1))
TextGadget(5, 50, 156, 250, 16, "")
ButtonGadget(6, 0, 172, 276, 24, "Ouvrir le dossier contenant les copies d'écran")
ButtonGadget(8, 275, 172, 24, 24, "?")
Icone = CreateImage(#PB_Any, 16, 16, 32)
StartDrawing(ImageOutput(Icone))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, 16, 16, 0)
DrawingMode(#PB_2DDrawing_AlphaBlend)
Box(1, 1, 14, 14, RGBA(150, 200, 255, 100))
Box(0, 0, 2, 2, $FF000000)
Box(14, 0, 2, 2, $FF000000)
Box(0, 14, 2, 2, $FF000000)
Box(14, 14, 2, 2, $FF000000)
DrawingMode(#PB_2DDrawing_AlphaBlend | #PB_2DDrawing_Outlined)
Box(1, 1, 14, 14, $60000000)
StopDrawing()
If AddSysTrayIcon(0, WindowID(0), ImageID(Icone))
SysTrayIconToolTip(0, "Copie d'écran")
Else
End
EndIf
AddKeyboardHook()
Repeat
Event = WaitWindowEvent(200)
Select Event
Case #PB_Event_Gadget
Select EventGadget() ; Gadgets
Case 1
Format = GetGadgetState(1)
AffichageQualite(Format)
Case 3
Qualite = GetGadgetState(3) + 1
Case 6
RunProgram("Explorer.exe", GetPathPart(ProgramFilename()), "")
Case 10
If GetGadgetState(10) = 1
Type = 0
EndIf
Case 11
If GetGadgetState(11) = 1
Type = 1
EndIf
Case 12
If GetGadgetState(12) = 1
Type = 2
EndIf
Case 13
If GetGadgetState(13) = 1
Type = 3
EndIf
Case 14
If GetGadgetState(14) = 1
Type = 4
EndIf
Case 8
MessageRequester("Copie d'écran", "Auteur : BOUGUIN Régis (LSI Développements)" + Chr(10) + "Logiciel de programmation : PureBasic v4")
EndSelect
Case #PB_Event_SysTray
Select EventType()
Case #PB_EventType_LeftClick, #PB_EventType_RightClick
Masquer = 1 - Masquer
If Masquer
HideWindow(0, 1)
Else
; ShowWindow_(WindowID(0), #SW_NORMAL)
SetWindowState(0, #PB_Window_Normal)
HideWindow(0, 0)
EndIf
EndSelect
EndSelect
If IsIconic_(WindowID(0)) And Masquer = 0
HideWindow(0, 1)
Masquer = 1
EndIf
Until Event = #PB_Event_CloseWindow
If CreatePreferences("Copie d'écran.ini")
WritePreferenceLong("Format", Format)
WritePreferenceLong("Qualité", Qualite)
WritePreferenceLong("Type", Type)
ClosePreferences()
EndIf
End