Tipp 0280 Screenshot erstellen - 1 -
Autor/Einsender:
Datum:
  Angie
20.10.2002
Entwicklungsumgebung:   VB 5
Screenshots können z.B. manuell über die Tastatur mit der Taste [Druck] bzw. [PrintScreen] für den gesamten Bildschirm bzw. mit der Tastenkombination [Alt]+[Druck] bzw. [Alt]+[PrintScreen] für das gerade aktive Fenster erstellt werden.
Mit der API-Funktion keybd_event, mit der das Niederdrücken und Lösen einer Taste simuliert werden kann, kann auf recht einfache Art und Weise in VB ein Screenshot erstellt werden, wahlweise sowohl vom gesamten Bildschirm als auch vom aktiven Fenster.
Code im Codebereich des Moduls
 
Option Explicit

Private Declare Function GetVersionEx Lib "kernel32" Alias _
      "GetVersionExA" (lpVersionInformation As _
      OSVERSIONINFO) As Long

Private Type OSVERSIONINFO
  dwOSVersionInfoSize As Long
  dwMajorVersion As Long
  dwMinorVersion As Long
  dwBuildNumber As Long
  dwPlatformId As Long
  szCSDVersion As String * 128
End Type

Public g_fIsWinNT As Boolean

Public Function IsWinNT() As Boolean
  Dim osvi As OSVERSIONINFO
  Dim intRet As Integer

  osvi.dwOSVersionInfoSize = 148
  osvi.szCSDVersion = Space$(128)
  intRet = GetVersionEx(osvi)
  If osvi.dwMajorVersion > 4 Then IsWinNT = True
End Function
 
Code im Codebereich der Form
 
Option Explicit

Private Declare Sub keybd_event Lib "user32" (ByVal _
    bVk As Byte, ByVal bScan As Byte, ByVal dwFlags _
    As Long, ByVal dwExtraInfo As Long)

Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_SNAPSHOT = &H2C
Private Const VK_MENU = &H12

Private Sub Form_Load()
  g_fIsWinNT = IsWinNT

  With picQuelle
    .AutoRedraw = True
    .AutoSize = True
    .Visible = False
  End With

  picZiel.AutoRedraw = True
End Sub

Private Sub cmdScreenshotDesktop_Click()
  Clipboard.Clear

  If g_fIsWinNT Then
    keybd_event VK_SNAPSHOT, 0, 0, 0
    keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
  Else
    keybd_event VK_SNAPSHOT, 1, 0, 0
    keybd_event VK_SNAPSHOT, 1, KEYEVENTF_KEYUP, 0
  End If

  DoEvents
  SizeBitmapToPicBox picQuelle, picZiel
End Sub

Private Sub cmdScreenshotWindow_Click()
  Clipboard.Clear

  If g_fIsWinNT Then
    keybd_event VK_SNAPSHOT, 1, 0, 0
    keybd_event VK_SNAPSHOT, 1, KEYEVENTF_KEYUP, 0
  Else
    keybd_event VK_MENU, 0, 0, 0
    keybd_event VK_SNAPSHOT, 0, 0, 0
    keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
    keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
  End If

  DoEvents
  SizeBitmapToPicBox picQuelle, picZiel
End Sub

Private Sub SizeBitmapToPicBox(ByVal vpicQuelle As PictureBox, _
                            ByVal vpicZiel As PictureBox)
  Dim sngRatio As Single
  Dim sngWidth As Single
  Dim sngHeight As Single

  vpicZiel.Cls

  vpicQuelle.Picture = Clipboard.GetData(vbCFBitmap)

  sngRatio = vpicQuelle.ScaleWidth / vpicQuelle.ScaleHeight

  sngWidth = vpicZiel.ScaleWidth
  sngHeight = vpicZiel.ScaleHeight

  If (sngWidth / sngHeight) > sngRatio Then
    sngWidth = sngRatio * sngHeight
  Else
    sngHeight = sngWidth / sngRatio
  End If

  vpicZiel.PaintPicture vpicQuelle.Picture, _
        (vpicZiel.ScaleWidth - sngWidth) / 2, _
        (vpicZiel.ScaleHeight - sngHeight) / 2, _
        sngWidth, sngHeight
End Sub
 
Weitere Links zum Thema
Screenshot erstellen - 2 -

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Download  (4 kB) Downloads bisher: [ 3086 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Freitag, 26. August 2011