screenshot bestimmtes fenster

  • guten abend, ich habe hier eine screenshot_ersteller.au3 heruntergeladen und versucht auf mein Problem anzupassen.

    mein reduzierter Code lautet:

    Spoiler anzeigen

    #Region ---Include---
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ScreenCapture.au3>
    #include <Misc.au3>
    #include <GuiListBox.au3>
    #include <Array.au3>
    #EndRegion ---Include---

    #Region ---Optionen---
    Opt("TrayAutoPause", 0)
    Opt("TrayIconDebug", 0)
    Opt("TrayIconHide", 0)
    Opt("TrayMenuMode", 1)
    Opt("TrayOnEventMode", 0)
    #EndRegion ---Optionen---

    #Region ---Veriablendekleration---
    Global $Nummer = 1
    Global $nTitle = "NetSkat -"
    #EndRegion ---Veriablendekleration---

    #Region ---Systray---
    TraySetIcon(@SystemDir & "\shell32.dll", -142)
    TraySetToolTip("Screenhot ersteller")
    TraySetClick(17)

    ;~ MenuItems:
    $TrayMenu_FotoAlles = TrayCreateItem("Screenshot Netskat erstellen")
    TrayCreateItem("")
    $TrayMenu_OrdnerOffnen = TrayCreateItem("Bilderordner öffnen")
    TrayCreateItem("")
    $TrayMenu_Exit = TrayCreateItem("Beenden")
    #EndRegion ---Systray---

    #Region ---Startup---
    $Pfad = @ScriptDir & "\Bilder\" & @MDAY & "." & @MON & "." & @YEAR
    If FileExists($Pfad) = 1 Then ;~ Es gibt schon Bilder von heute
    $Grossse = DirGetSize($Pfad, 1)
    If $Grossse[1] > 0 Then ;~ Wenn es eine Datei gibt
    $Frage = MsgBox(262468, "Scrennhot ersteller", "Willst du die alten Bilder löschen?")
    If $Frage = 6 Then ;~ Alte Bilder überschreiben
    DirRemove($Pfad, 1)
    DirCreate($Pfad)
    Else
    ;~ Nummer des letten Bildes herausfinden:
    $Durchlauf = 1
    While 1
    If FileExists($Pfad & "\BildNr." & $Durchlauf & ".jpg") = 0 Then
    $Nummer = $Durchlauf
    ExitLoop
    EndIf
    $Durchlauf += 1
    WEnd
    EndIf
    EndIf
    Else
    DirCreate($Pfad)
    EndIf
    #EndRegion ---Startup---

    #Region ---Hotkeys---
    HotKeySet("{F2}", "_foto")
    HotKeySet("{F3}", "_exit")
    #EndRegion ---Hotkeys---

    #Region ---While---
    While 1
    Switch TrayGetMsg()
    Case $TrayMenu_FotoAlles
    MsgBox(0,"","foto machen")
    _foto()

    Case $TrayMenu_Exit
    _exit()
    Case $TrayMenu_OrdnerOffnen
    _bilderordner_offnen()
    EndSwitch
    WEnd
    #EndRegion ---While---

    #Region ---Funktionen---
    Func _bilderordner_offnen() ;~ Ordner mit den Bildern öffnen
    Run("explorer.exe " & $Pfad)
    EndFunc ;==>_bilderordner_offnen

    ;~ Fenster fotographieren:
    Func _foto()
    MsgBox(0,"1","foto machen")
    WinActivate ($nTitle)
    WinWaitActive ($nTitle)
    $fenster = "";hier fehlt richtige angabe des aktiven Fensters ?
    _ScreenCapture_CaptureWnd($Pfad & "\BildNr." & $Nummer & ".jpg", $fenster) ;~ Foto machen
    TrayTip("", "Foto erfolgreich erstellt.", 2, 1) ;~ Erfolgreich erstellt Info anzeigen
    $Nummer += 1 ;~ Nummer hochsetztn für das nächste Bild
    EndFunc ;==>_foto_von_Fenster
    Func _exit() ;~ Programm beeden
    Exit
    EndFunc ;==>_exit

    alles soweit ok :) , bis auf die richtige angabe des tensters das photografiert werden soll.

    irgendwie ist es denke ich ein unterschied ob das fenster maximiert ist oder verkleinert,

    Zitat

    Aus autiot HilfeErstellt von einem bestimmten Fenster einen Screenshot
    #Include <ScreenCapture.au3>
    _ScreenCapture_CaptureWnd($sFileName, $hWnd [, $iLeft = 0 [, $iTop = 0 [, $iRight = -1 [, $iBottom = -1 [, $fCursor = True]]]]])
    Parameter
    $sFileName Kompletter Pfad, Dateiname und Erweiterung der Bilddatei
    $hWnd Handle des Fensters


    ich bin seit Stunden am rumsuchen, bekomme das aber nicht auf die Reihe, :cursing:

    danke im voraus für Lösung
    gruss
    roland_k

  • WinWaitActive gibt den Handle vom Fenster zurück den du wiederum bei _ScreenCapture_CaptureWnd brauchst:

    [autoit]

    Func _foto()
    MsgBox(0,"1","foto machen")
    WinActivate ($nTitle)
    $fenster = WinWaitActive ($nTitle)
    _ScreenCapture_CaptureWnd($Pfad & "\BildNr." & $Nummer & ".jpg", $fenster) ;~ Foto machen

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Habe nen kleines Beispiel dazu gemacht


    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ScreenCapture.au3>

    [/autoit][autoit][/autoit][autoit]

    $Form = GUICreate("Form", 625, 443, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 184, 160, 257, 113)
    GUISetState(@SW_SHOW)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    MsgBox(0,"1","foto machen")
    WinActivate ($Form)
    $fenster = WinWaitActive ($Form)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    _ScreenCapture_CaptureWnd(@ScriptDir & "\BildNr." & 0 & ".jpg", $fenster) ;~ Foto machen

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit][autoit][/autoit][autoit]

    EndSwitch
    WEnd

    [/autoit]
  • Hallo super47,

    du musst dir zuerst mit WinGetHandle das Handle des Fensters besorgen, danach mit WinWaitActive dafür sorgen, dass das Programm mit dem "fotografieren warten soll bis das Fenster aktiv ist. Hier ein allgemein gehaltenes Beispiel:

    [autoit]

    #Include <ScreenCapture.au3>

    [/autoit][autoit][/autoit][autoit]

    run("Calc.exe")
    WinWaitActive("Rechner")

    [/autoit][autoit][/autoit][autoit]

    $hwnd = WinGetHandle("Rechner","")
    _ScreenCapture_CaptureWnd (@ScriptDir & "\test.jpg",$hwnd)

    [/autoit]

    mfg (Auto)Bert