J'ai ce (très) vieux morceau de code qui est peut-être utile :
Code : Tout sélectionner
;
; Faire une copie d'écran et la sauver sous forme de fichier JPEG
;
;-Constantes
; Window Constants
Enumeration
#Win_CopieEcran
EndEnumeration
; Gadget Constants
Enumeration
#Btn_CopieEcran
#Btn_Quitter
EndEnumeration
;-Procédures
; Faire la copie d'écran et la sauver en JPEG
Procedure SaveDesktopScreenshotToJPEG(FileName.s)
; Créer un image de la taille de l'écran
ImageNr.l = 666
Width.l = GetSystemMetrics_(#SM_CXSCREEN)
Height.l = GetSystemMetrics_(#SM_CYSCREEN)
hImage.l = CreateImage(ImageNr,Width,Height)
; Copier l'écran dans l'image
hdc.l = StartDrawing(ImageOutput())
BitBlt_(hdc,0,0,Width,Height,GetDC_(GetDesktopWindow_()),0,0,#SRCCOPY)
StopDrawing()
; Sauver l'image au format JPEG
UseJPEGImageEncoder()
Quality.l = 7
SaveImage(ImageNr,FileName,#PB_ImagePlugin_JPEG,Quality)
; Libérer les ressources
FreeImage(ImageNr)
EndProcedure
; Afficher l'application
Procedure Open_Win_CopieEcran()
If OpenWindow(#Win_CopieEcran, 0, 0, 150, 24, #PB_Window_BorderLess, "Copie d'écran")
If CreateGadgetList(WindowID())
ButtonGadget(#Btn_CopieEcran, 0, 0, 75, 25, "Copie d'écran")
GadgetToolTip(#Btn_CopieEcran, "Faire une copie d'écran")
ButtonGadget(#Btn_Quitter, 75, 0, 75, 25, "Quitter")
GadgetToolTip(#Btn_Quitter, "Quitter la copie d'écran")
EndIf
EndIf
EndProcedure
; Forcer le premier-plan
Procedure ForceForeground(handle.l)
thread1=GetWindowThreadProcessID_(GetForegroundWindow_(),0)
thread2=GetWindowThreadProcessID_(handle,0)
If thread1<>thread2 : AttachThreadInput_(thread1,thread2,#True) : EndIf
SetForegroundWindow_(handle)
If thread1<>thread2 : AttachThreadInput_(thread1,thread2,#False) : EndIf
EndProcedure
;- Main
Open_Win_CopieEcran()
Repeat
ForceForeground(WindowID())
Event = WaitWindowEvent()
If Event = #PB_EventGadget
GadgetID = EventGadgetID()
If GadgetID = #Btn_CopieEcran
; Cacher la fenêtre
HideWindow(#Win_CopieEcran, 1)
RedrawWindow_(0,0,0,0)
Sleep_(100)
; Faire la copie d'écran
SaveDesktopScreenshotToJPEG("CopieEcran.jpg")
; Montrer la fenêtre
HideWindow(#Win_CopieEcran, 0)
ElseIf GadgetID = #Btn_Quitter
; Quitter
Break
EndIf
EndIf
Until Event = #PB_EventCloseWindow
End
Cet exemple recopie tout l'écran dans un JPEG.