Private Sub cmdScreenshot_Click()
'--------------------------------------------------------------------------------
' Beispiel-Prozedur zum Erstellen eines Bildschirmfotos aus Access mithilfe des
' Windows Snipping Tools. Erfasst einen frei whlbaren rechteckigen Ausschnitt
' des Bildschirms, speichert ihn als Bilddatei ab und zeigt dieses dann an.
'
' Autor: Raphael Hein - www.datenbankmanufaktur.de
' Datum: 07.02.2024
'
' Bentigt: modImageProcess
'--------------------------------------------------------------------------------
   Dim sSnip As String    ' Pfad zum Snipping Tool
   Dim sBild As String    ' Pfad zum Bild
   Dim wsh As Object      ' Shell-Object
   Dim fso As Object      ' FileSystem-Object
   
   Set wsh = VBA.CreateObject("WScript.Shell")
   Set fso = CreateObject("Scripting.FileSystemObject")
   
   ' die bekannten Pfade ausprobieren, bis die Datei gefunden ist
   On Error Resume Next   ' Fehler bergehen
   sSnip = fso.GetFile(wsh.ExpandEnvironmentStrings("%windir%\System32\SnippingTool.exe"))
   If sSnip = "" Then sSnip = fso.GetFile(wsh.ExpandEnvironmentStrings("%windir%\SysWOW64\SnippingTool.exe"))
   If sSnip = "" Then sSnip = fso.GetFile(wsh.ExpandEnvironmentStrings("%windir%\Sysnative\SnippingTool.exe"))
   If sSnip = "" Then sSnip = fso.GetFile(wsh.ExpandEnvironmentStrings("%userprofile%\AppData\Local\Microsoft\WindowsApps\SnippingTool.exe"))
   On Error GoTo 0        ' Fehler wieder anzeigen
   
   If sSnip = "" Then
      MsgBox "Das Snipping Tool wurde nicht gefunden und kann nicht gestartet werden.", vbExclamation, "acScreenshot"
      Exit Sub
   End If

   ' Access-Programmfenster minimieren, damit es nicht im Weg ist
   DoCmd.RunCommand acCmdAppMinimize

   ' vorhandene Bild entfernen
   Me!imgScreenshot.Picture = ""

   ' Bildpfad festlegen
   sBild = CurrentProject.Path & "\Screenshot.png"
   ' oder z. B. jeden Screenshot einzeln mit Zeitstempel als Name abspeichern
   'sBild = CurrentProject.Path & "\Screenshot_" & Format(Now(), "yyyy-mm-dd_hh-nn-ss") & ".png"

   ' Screenshot mit dem Snipping-Tool aufnehmen und auf das Ende des Prozesses warten
   wsh.Run Chr(34) & sSnip & Chr(34) & " /clip", 1, True

   ' Access-Programmfenster wieder anzeigen
   DoCmd.RunCommand acCmdAppRestore

   ' Eieruhr an
   DoCmd.Hourglass True
   
   ' Zwischenablage in Bildpfad abspeichern
   Call SaveClip2Bit(sBild)
   
   ' Screenshot anzeigen
   Me!txtBild = sBild
   Me!imgScreenshot.Picture = sBild
   
   ' oder das Bild umbennen, verschieben, Pfad in der Datenbank speichern etc. und dann anzeigen
   
   ' Eieruhr aus
   DoCmd.Hourglass False

End Sub
