Screenshot

Primax

Mitglied
Hallo,
wie mache ich einen Screenshot von einem Fensterinhalt? Ich habe bei einigen Tipps was gefunden, das mit einer Art "Drucktaste" arbeitet. Das kann ich aber nicht verwenden, weil ich dann das gesamte Fenster oder sogar den ganzen Desktop als Bild bekomme. Ich brauche aber einen Fensterinhalt, der noch dazu variabel ist. (Ich erzeuge eine gewisse Anzahl Objekte auf einem Form, die ich dann nach Word kopieren möchte, über die Zwischenablage)

grüsse primax
 
Servus!

Ungetestet:

Code:
Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

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

Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (LpVersionInformation As OSVERSIONINFO) As Long

 

Public Const VK_MENU = &H12

Public Const KEYEVENTF_KEYUP = &H2

 

Type OSVERSIONINFO

    dwOSVersionInfoSize As Long

    dwMajorVersion As Long

    dwMinorVersion As Long

    dwBuildNumber As Long

    dwPlatformId As Long

    szCSDVersion As String * 128

End Type

 

Public Sub GetWindowSnapShot(Mode As Long)

    Dim altscan%, NT As Boolean

    NT = IsNT

    If Not NT Then

        If Mode = 0& Then Mode = 1& Else Mode = 0&

    End If

    If NT And Mode = 0 Then

        keybd_event vbKeySnapshot, 0&, 0&, 0&

    Else

        altscan = MapVirtualKey(VK_MENU, 0)

        keybd_event VK_MENU, altscan, 0, 0

        DoEvents

        keybd_event vbKeySnapshot, Mode, 0&, 0&

    End If

    DoEvents

    keybd_event VK_MENU, altscan, KEYEVENTF_KEYUP, 0

End Sub

 

Public Function IsNT() As Boolean

    Dim verinfo As OSVERSIONINFO

    verinfo.dwOSVersionInfoSize = Len(verinfo)

    If (GetVersionEx(verinfo)) = 0 Then Exit Function

    If verinfo.dwPlatformId = 2 Then IsNT = True

End Function

 

Sub Screenshot()

    'gesamten Bildschirm:

    GetWindowSnapShot 0

    'oder nur das aktives Fenster:

    'GetWindowSnapShot 1

    Sheets("Tabelle1").Paste

    ThisWorkbook.Save

End Sub

Gruß Tom
 
Bei OpenGL und Direct3D Fenstern handelt es sich um YUV Overlay-Fenster. Diese liegen nicht mehr auf einer Ebene mit dem Desktop, und können nicht auf herkömmliche Weise gecaptured werden. Dafür gibt es sehr spezielle und teure Programme. IMHO das beste: Hyperions HypersnapDX.

MfG

f0x
 

Neue Beiträge

Zurück