Faire une capture d'écran

Contenu du snippet

Private Declare Function BitBlt Lib "GDI32" (ByVal hDestDC As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hSrcDC As IntPtr, ByVal SrcX As Integer, ByVal SrcY As Integer, ByVal Rop As Integer) As Integer
    Private Declare Function GetForegroundWindow Lib "user32" () As IntPtr
    Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As IntPtr, ByRef lpRect As Rectangle) As Integer
    Private Declare Function GetDesktopWindow Lib "user32" () As IntPtr
    'Capture tout l'écran
    Public Shared Function ShotScreen() As Bitmap
        Try
            Dim DesktopRect As Rectangle = Screen.GetBounds(New Point(0, 0)) 'obtient la taille du bureau sous forme de rectangle dans DesktopRect
            Return ShotScreenPart(DesktopRect.Width, DesktopRect.Height) 'appele la fonction ShotScreenPart avec les dimensions du bureau. 
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Function
    'Capture la fenetre active
    Public Shared Function ShotActiveWin() As Bitmap
        Dim WinRect As Rectangle
        Try
            If GetWindowRect(GetForegroundWindow, WinRect) Then 'obtient la taille et la position de la fenetre active sous forme de rectangle (WinRect)
                Return ShotScreenPart(WinRect.Size.Width - WinRect.Left, WinRect.Size.Height - WinRect.Top, WinRect.Left, WinRect.Top)  'appele la fonction ShotLoc avec les dimensions et la position de la fenetre. 
            End If
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Function
    'Capture une partie de l'ecran, defini par les deux variable width et height (dimensions du rectangle), et des valeur optionels X et Y (base du rectangle)
    Public Shared Function ShotScreenPart(ByVal nwidth As Integer, ByVal nheight As Integer, Optional ByVal x As Integer = 0, Optional ByVal y As Integer = 0) As Bitmap
        Dim resultBmp As Bitmap = New Bitmap(nwidth, nheight) 'crée l'objet bitmap cible
        Dim SrcGraph As Graphics = Graphics.FromHwnd(GetDesktopWindow) 'crée l'objet "graphics" SelGraph a partir du handdle du bureau
        Dim BmpGraph As Graphics = Graphics.FromImage(resultBmp) 'crée un objet graphics à partir du bitmap
        Dim bmpDC As IntPtr = BmpGraph.GetHdc() 'obtient le device context du bitmap
        Dim hDC As IntPtr = SrcGraph.GetHdc() 'obtient le device context du bureau
        BitBlt(bmpDC, 0, 0, nwidth, nheight, hDC, x, y, &HCC0020) '"bit-block transfer" : copie chaque bits affichés dans le device context hDC dans le device context du bitmap 
        SrcGraph.ReleaseHdc(hDC) 'relache le device context du bureau
        BmpGraph.ReleaseHdc(bmpDC) 'relache le device context du bitmap
        SrcGraph.Dispose()
        BmpGraph.Dispose() 'libere toutes les ressources crées par l'objet (useless?)
        Return resultBmp
    End Function

Compatibilité : VB.NET 1.x

Disponible dans d'autres langages :

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.