Screenshot mittels AutoIT realisieren

  • Hallo,

    ich habe eine eher allgemeine Frage zu AutoIT, welche ich anhand eines Beispieles stellen möchte. Wenn ich z.B. von einer Internetseite z.B. Google News jede Stunde einen Screenshot erstellen möchte, kann ich das mittels AutoIT oder einer Erweiterung von AutoIT realisieren und wenn ja wie?

    [autoit]


    #include <ie.au3>
    #include <ScreenCapture.au3>

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

    $oIE = _IECreate ("http://news.google.de/")
    If IsObj($oIE) Then
    _IELoadWait($oIE)
    _ScreenCapture_Capture(@MyDocumentsDir & "\GDIPlus_Image1.jpg")
    Else
    MsgBox(48,"Erstellen des IE-Objekts fehlgeschlagen","Es konnte keine neue InternetExplorer-Instanz erzeugt werden!")
    EndIf

    [/autoit]

    Bei dieser Variante aus den Beispielszenarios könnte zwischen dem Befehl _IELoadWait($oIE) und _ScreenCapture_Capture(@MyDocumentsDir & "\GDIPlus_Image1.jpg") ja z.B. ein anderes Fenster automatisch erscheinen z.B. eine Erinnerung oder ein Chatfenster, wodurch beim Screenshot auch dieses Fenster zu sehen ist bzw. das Explorerfenster komplett überblendet wird.

    Ich hoffe ihr könnt mir helfen. Danke :)

    • Offizieller Beitrag

    Du kannst auch direkt von einem Window eine Screenshot machen.
    Schau dir in der Hilfe mal _ScreenCapture_CaptureWnd an.
    Den benötigten Handle, kannst du mit WinGetHandle bekommen.

  • Die Funktion schneidet allerdings nur einen Teil von einem normalen Screenshot aus, du musst also sicherstellen, dass das Fenster sichtbar und im Vordergrund ist. Ansonsten kann es auch sein, dass ein Teil eines überlappenden Fensters auch aufgenommen wird.

  • Danke für die schnelle Antwort.

    Raupi
    Die WinGetHandle benötigt ja den Fenstertitel als Eingabe, der ist bei Browserfenster ja nicht immer so leicht rauszubekommen und kann sich auch ändern, gibt es eine Möglichkeit/Methode das Handle über die Objektreferenz die durch _IECreate(); erstellt wird auszulesen? Ich habe es so gemacht und es geht zwar, jedoch verstehe ich nicht ganz warum man den Umweg über WinGetTitle machen muss, wenn ich das weglasse und gleich WinGetHandle mache kommt nur eine Datei heraus mit einem Pixel:

    [autoit]


    _IELoadWait($oIE)
    $hWnd = WinGetHandle($oIE)
    $sTitle = WinGetTitle($hWnd)
    $SsTake=_ScreenCapture_CaptureWnd (@MyDocumentsDir & "\GDIPlus_Image.jpg", WinGetHandle($sTitle))

    [/autoit]

    name22
    Das sicherstellen ist gerade das Problem ^^ Aber mit der _ScreenCapture_CaptureWnd ist es wahrscheinlicher das kein anderes Fenster dazwischen aufgerufen wird, evtl. macht es noch Sinn die WinSetOnTop Methode aufzurufen für das Fenster, dann könnten nur Fenster mit gleichen Attribut das überlagern und die müssten dann genau in der millisekunde aufgerufen werden sobald der Screenshot gemacht werden soll.