2017-06-25 2 views
-1

J'utilise ce code pour capturer bureauComment capturer les fenêtres actives sur le bureau par vb.net?

Private Function cc() As Bitmap 
    Dim s As Screen = Screen.PrimaryScreen 
    Dim img As New Bitmap(s.Bounds.Width, s.Bounds.Height) 
    Dim gr As Graphics = Graphics.FromImage(img) 
    gr.CopyFromScreen(s.Bounds.Location, Point.Empty, s.Bounds.Size) 
    Return img 
End Function 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Try 
     Me.PictureBox1.Image = cc() 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 
End Sub 

Mais maintenant, je veux saisir que l'écran actif, comment puis-je faire?

Cordialement ,,,,,

+0

https://stackoverflow.com/a/1163770/1271037 – dovid

+0

Lomed! Comment faire pour capturer la capture d'écran de fenêtres actives par vb.net pas par C# – user206402

Répondre

0

pour la copie fenêtre active de notre application, il suffit de vérifier la position et la taille de la fenêtre et de réduire la copie de ce rectangle:

Public Sub ScreenCopy(Optional file As String = "d:\test.jpg") 
    Dim bounds = Me.Bounds 
    Using bitmap As New Bitmap(bounds.Width, bounds.Height) 

     Using g = Graphics.FromImage(bitmap) 
      g.CopyFromScreen(New Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size) 
     End Using 

     bitmap.Save(file, ImageFormat.Jpeg) 
     Process.Start(file) ' for test purposes 
    End Using 
End Sub 

pour la copie active du courant fenêtre même ne fait pas partie de notre application, vous devez utiliser une API pour détecter sa taille et son emplacement.

pour cette utilisation de cette classe (crédit: @KvanTTT: https://stackoverflow.com/a/9087955/1271037)

Class ScreenCapturer 
    <DllImport("user32.dll")> _ 
    Private Shared Function GetForegroundWindow() As IntPtr 
    End Function 

    <DllImport("user32.dll")> _ 
    Private Shared Function GetWindowRect(hWnd As IntPtr, ByRef rect As Rect) As IntPtr 
    End Function 

    <StructLayout(LayoutKind.Sequential)> _ 
    Private Structure Rect 
     Public Left As Integer 
     Public Top As Integer 
     Public Right As Integer 
     Public Bottom As Integer 
    End Structure 

    Public Function Capture(Optional activeWindowOnly As Boolean = True) As Bitmap 
     Dim bounds As Rectangle 

     If Not activeWindowOnly Then 
      bounds = Screen.GetBounds(Point.Empty) 
      CursorPosition = Cursor.Position 
     Else 
      Dim foregroundWindowsHandle = GetForegroundWindow() 
      Dim rect = New Rect() 
      GetWindowRect(foregroundWindowsHandle, rect) 
      bounds = New Rectangle(rect.Left, rect.Top, rect.Right - rect.Left, rect.Bottom - rect.Top) 
      CursorPosition = New Point(Cursor.Position.X - rect.Left, Cursor.Position.Y - rect.Top) 
     End If 

     Dim result = New Bitmap(bounds.Width, bounds.Height) 

     Using g = Graphics.FromImage(result) 
      g.CopyFromScreen(New Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size) 
     End Using 

     Return result 
    End Function 

    Public Property CursorPosition() As Point 

End Class 

comment utiliser:

Public Sub ScreenCopy(Optional file As String = "d:\test.jpg") 
    Dim sc = New ScreenCapturer() 

    Using bitmap = sc.Capture() 
     bitmap.Save(file, ImageFormat.Jpeg) 
     Process.Start(file) ' for test purposes 
    End Using 
End Sub 
+0

Désolé mais je ne peux pas le comprendre – user206402