Code : Tout sélectionner
;/ Author : Kale / Droopy
; Return pointer to BMP SnapShot
Global CaptureScreenWidth , CaptureScreenHeight , CaptureScreenBMPHandle
Procedure CaptureScreenPart(Left.l, Top.l, Width.l, Height.l)
dm.DEVMODE
BMPHandle.l
srcDC = CreateDC_("DISPLAY", "", "", dm)
trgDC = CreateCompatibleDC_(srcDC)
BMPHandle = CreateCompatibleBitmap_(srcDC, Width, Height)
SelectObject_( trgDC, BMPHandle)
BitBlt_( trgDC, 0, 0, Width, Height, srcDC, Left, Top, #SRCCOPY)
DeleteDC_( trgDC)
ReleaseDC_( BMPHandle, srcDC)
CaptureScreenHeight=Height
CaptureScreenWidth=Width
CaptureScreenBMPHandle=BMPHandle
ProcedureReturn BMPHandle
EndProcedure
Procedure CaptureFullScreen()
ProcedureReturn CaptureScreenPart(0,0,GetSystemMetrics_(#SM_CXSCREEN),GetSystemMetrics_(#SM_CYSCREEN))
EndProcedure
Procedure CaptureWindow(Handle.l) ; ### The Window must be visible !
If Handle
WindowSize.RECT
GetWindowRect_(Handle, @WindowSize)
ProcedureReturn CaptureScreenPart(WindowSize\Left, WindowSize\Top, WindowSize\Right - WindowSize\Left, WindowSize\Bottom - WindowSize\Top)
EndIf
EndProcedure
; #PB_ImagePlugin_BMP / #PB_ImagePlugin_JPEG / #PB_ImagePlugin_PNG
; JpegCompression 0 (Bad) to 10 (Best) --> Only for Jpeg
Procedure SaveCapture(File.s, ImagePlugin , JpegCompression)
If CaptureScreenBMPHandle
Id=CreateImage(#PB_Any, CaptureScreenWidth, CaptureScreenHeight)
StartDrawing(ImageOutput())
DrawImage(CaptureScreenBMPHandle,0,0)
StopDrawing()
Select ImagePlugin
Case #PB_ImagePlugin_JPEG
UseJPEGImageEncoder()
Retour=SaveImage(Id, File,#PB_ImagePlugin_JPEG,JpegCompression)
Case #PB_ImagePlugin_PNG
UsePNGImageEncoder()
Retour=SaveImage(Id, File,#PB_ImagePlugin_PNG)
Default
Retour=SaveImage(Id, File)
EndSelect
FreeImage(Id)
EndIf
ProcedureReturn Retour
EndProcedure
;/ Test
CaptureWindow(GetHandle("jaPBe"))
SaveCapture("c:\CaptureFullScreen.png",#PB_ImagePlugin_PNG,0)
SaveCapture("c:\CaptureFullScreen.bmp",#PB_ImagePlugin_BMP,0)
SaveCapture("c:\CaptureFullScreen.Jpg",#PB_ImagePlugin_JPEG,10)