Frage zur Screenshotfunktion

  • Hallo Leudde,


    mal eine Frage zur Screenshotfunktion von Autoit, bzw 2. Ist es möglich dass bei offenen Fenstern, von denen ein Screenshot gemacht werden soll, evtl. überlagerte Requester und Fenster weggefiltert werden?


    AutoIt
    _ScreenCapture_CaptureWnd("c:\clips\notepad.jpg", $hWnd) ;Scrennshot und save

    zweite Frage: Ist es ggf möglich dass Overwrite abzustellen, dass beim erneuten Screenshot ein neues mit ggf. '1 ...2... usw. erstellt wird?


    Ein schönes Wochenende



    lg



    Chris

  • Zur ersten Frage kann ich nicht viel sagen, denke aber nicht das es möglich ist aber da wissen andere hier sicherlich mehr ;)

    Edit: Schau mal hier ob dir das hilft: https://www.autoitscript.com/f…ndComment&comment=1014178

    Zur zweiten Frage: Bau dir einen Counter ein und verbinde diesen mit dem Namen, dann erreichst du genau das.

    Ein Beispiel anhand des Beispielcodes:

  • Hier als Beispiel das bei mir funktionierte um doch beide deine Fragen mit "ja" zu beantworten ;)

  • jop hallo und recht herzlichen Dank erst mal Moombas. Also bezüglich der Frage mit den überlagerten Fenstern wäre es mir unverständlich warum es nicht gehen sollte, sofern dass gesnapschotete Fensster im Hintergrund ist geht es ja auch, obwohl nicht sichtbar.


    Das erste Script von Dir habe ich mir mal angesehen, er macht zwar eine Reihe von Snapshots, aber jweils alles nur weisse quadartische Flächen. Also um es mal genauer zu beschreiben, es soll von einem bestimmten Programm Fenster, in dem bestimmte Gebäudeinformationen dargestellt sind, auf Klick ein Snapshot angefrtig werden, und auf einem anderen Server abgelegt werden (in meinem Miniscript noch testweise lokal. Ich hoffe es ist nicht ganz zu unübersichtlich.


    lg und schönes Wocheende noch

  • Hi,

    Das erste Script von Dir habe ich mir mal angesehen, er macht zwar eine Reihe von Snapshots, aber jweils alles nur weisse quadartische Flächen. Also um es mal genauer zu beschreiben, es soll von einem bestimmten Programm Fenster, in dem bestimmte Gebäudeinformationen dargestellt sind

    Funktioniert denn ein _ScreenCapture_Capture AutoIt-Screenshot vom gesamten Bildschirm, wenn dein "bestimmtes Programm" im Vordergrund ist?

    Und btw., was ist denn DAS überhaupt für eine Beschreibung die einem eventuell Helfenden sofort signalisiert, dass deinerseits absolut kein Interesse besteht, Informationen bereitzustellen?! Kein Wunder, dass sich die Spezialisten hier bisher noch nicht gemeldet haben!

    Wenn das "bestimmte Programm" im Fenster kein GDI, sondern, OpenGL oder DirectX zur Ausgabe benutzt, dann funktioniert auch _ScreenCapture_Capture nicht! Genausowenig, wenn das "bestimmte Programm", sobald sich das Fenster im Hintergrund befindet, nicht rendert. Je nach Bibliothek, die der Programmierer verwendet, ist das voreingestellt, bzw. wird von Windows aus Gründen der Ressourceneinsparung so vorgegeben.


    Um OpenGL- oder DirectX-Fensterinhalte zu capturen gibt es andere Funktionen, die aber aus o.g. Gründen meist nur funktionieren, wenn das Fenster sich im Vordergrund befindet.

  • Moin,


    _ScreenCapture_CaptureWnd() benutzt das übergebene Fensterhandle nur, um die Position und Größe des Fensters auf dem Bildschirm zu bestimmen. Dann wird mit diesen Daten die Funktion _ScreenCapture_Capture() für diesen Bereich des Desktops aufgerufen. Wenn zu dieser Zeit in diesem Bereich auch andere Fenster über dem gewünschten befinden, sind sie auch im Screenshot enthalten.


    Du solltest mal das Skript von Moombas im Beitrag #3 probieren.

  • hallo und danke für die Hinweise ,


    ja die Funjtion Ganzer Screen geht auch wenn das Spezielle Fenster sichtbar ist. Ich schau mit mal das Script von Mobas an. Um es noch mal zu sagebn, ich möchte dass er mir den vorherigen Snapshot erhält und nicht überschreibt, so dass ich quasi eine Art History erhalte, als Bild.jpg, Bild01.jpg etc. Das mit den ggf überlagernden Fenstern kann ich ja so verhindern, indem ich das spezielle Programm automatisch minimieren lasse, dass geht ja mit autoit.


    Übrigens das zweite Scrupt von Mombbaas hatte ich auch probiert, ich erhalte dort auch nur einen kleinen Auschnitt ohne Inhalt:(


    lg und schönen SonntaG NOCH

  • Zitat

    Um es noch mal zu sagen, ich möchte dass er mir den vorherigen Snapshot erhält und nicht überschreibt, so dass ich quasi eine Art History erhalte, also Bild.jpg, Bild01.jpg etc.

    Verwende statt einer Zählervariablen doch einen Zeitstempel, den Du vor oder hinter den Dateinamen setzt, also :

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Das hat funktioniert, recht herzlichen Dank, also schaut jetzt so aus:


    schöne Woche noch



    lg

  • Code
    $sFileName= $targetdirPath & "ActiveWindow.jpg"

    +

    Code
    _ScreenCapture_SaveImage ( $sFilename & "PictuRec.jpg", $Image, $fFreeBmp ) 

    =

    Code
    _ScreenCapture_SaveImage ( $targetdirPath & "ActiveWindow.jpg" & "PictuRec.jpg", $Image, $fFreeBmp ) 

    ;)

  • So mein ScreenShot Tool ist jetzt soweit noch mal überarbeitet, aber 2 Fragen hätte ich da noch.


    Noch mal zur Auffrischung. Es gibt 2 Mess Fenster (hier als Beispiel Notepad und Taskmanager), diese sollen wahlweise manuel einzeln aufgezeichnet werden oder, jetzt neu imIntervall beide Fenster. Ich weiss ist zwar nicht besonders elegant gelöst, aber es funkltioniert so wie gewünscht.


    DIe Frage wären nun: Wie kann ich die Intervallfunktion abbrechen, ohne das Tool direkt zu beenden?


    Die zweite Frage bezieht sich auf die ScreenSHotfunktion selbst. Sofern das Fenster nicht im Task liegt, und sich ein Fenster drüberschiebt, wird das mit in den Screenshot eingefügt, das ist natürlich äusserst unschön, hat da jemand ne Idee? Würde ich mich sehr freuen.



    Das Script schaut nun so aus

    Vielen Dank schon mal und ein schönes Wochenende

  • Wegen deinem zweiten Problem, eine Idee (wenn auch unschön und ggf. weiß jemand etwas besseres):

    1. Fenster wovon ein Screenshot gemacht werden soll, den Status "Stay_On_Top" mit WinSetOnTop() geben

    2. (ggf. muss das Fenster aktiviert werden mit Winactivate um das nochmal zu triggern aber da bin ich mir gerade nicht sicher)

    3. Screenshot machen

    4. Fenster wovon ein Screenshot gemacht werden soll, den Status "Stay_On_Top" mit WinSetOnTop() wieder nehmen

  • Die hast du ja schon definiert.

    Vorschlag: