Screenshots in Schleife erstellen - mit Button beenden

Afritus

Mitglied
Hallo!

Vorerst möchte ich sagen, dass ich schon 2 solche Themen in diesem Forum gefunden habe, jedoch behandeln diese nicht das genau gleiche Problem und auch funktionierten deren Lösungen bei mir nicht.
Ich habe vor, ein Programm zu schreiben, das beim Klicken auf den "START"-Button alle 10 Sekunden einen Screenshot erstellt, und diese speichert. Beim Klicken auf einen zweiten "Stop"-Button soll diese Schleife unterbrochen werden.

Nun habe ich mit dem ersten Button begonnen und folgendes geschrieben:

Code:
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
        Dim b As New Bitmap(1280, 800)
        Using g As Graphics = Graphics.FromImage(b)
            g.CopyFromScreen(0, 0, 0, 0, New Size(1280, 800))
        End Using
        b.Save("C:\screenshot1.jpg", Imaging.ImageFormat.Jpeg)

        System.Threading.Thread.Sleep(10000)

        Dim a As New Bitmap(1280, 800)
        Using g As Graphics = Graphics.FromImage(a)
            g.CopyFromScreen(0, 0, 0, 0, New Size(1280, 800))
        End Using
        a.Save("C:\screenshot2.jpg", Imaging.ImageFormat.Jpeg)


    End Sub

End Class

Nun werden beim Klicken auf den "START"-Button zwei Screenshots erstellt, mit einer Verzögerung von 10 Sekunden.
Nun hätte ich 2 Fragen:
1. Ich krieg das mit der Schleife nicht hin. Ich hab versucht, den Namen des Bildes durch eine Variable zu ersetzen, und dieser Variable die Systemzeit zuzuweisen, jedoch bin ich entweder zu dumm, die Befehle richtig anzuschreiben oder aber es klappt einfach nicht. Außerdem müsste nicht nur der Name des Bildes bei jedem Screenshot geändert werden, sondern auch der Buchstabe (beim ersten das "b", beim zweiten das "a").
2. Wenn die Schleife dann läuft, wie kann ich diese mit einem zweiten "STOP"-Button augenblicklich beenden? Wenn bei mir dieses Programm läuft, sind für diese Dauer alle anderen Buttons komischerweise deaktiviert bzw. kann ich diese nicht anklicken.

VIELEN Dank schonmal für die Hilfe und mit freundlichen Grüßen,
Markus
 
Hallo Markus,

ich fange mal mit deinem 2. Punkt an.
Die Variante mit der Schleife ist der denkbar ungünstigste Lösungsansatz, weil du damit die ganze GUI blockierst. Besser du installierst einen Timer mit dem 10-Sekunden-Intervall, den du dann mit den Start/Stopp-Buttons startest oder anhältst.

Einen Zeitstempel kannst du dir mit Hilfe der DateTime-Struktur generieren, z.B.:
Visual Basic:
DateTime.Now.ToShortDateString() + DateTime.Now.ToLongTimeString()
Zu dem Problem mit "a" und "b": Du brauchst Bitmap und Graphics-Object nur einmal anzulegen:
Visual Basic:
Dim b As New Bitmap(1280, 800)
Using g As Graphics = Graphics.FromImage(b)
    g.CopyFromScreen(0, 0, 0, 0, New Size(1280, 800))
    b.Save("C:\screenshot1.jpg", Imaging.ImageFormat.Jpeg)

    System.Threading.Thread.Sleep(10000)

    g.CopyFromScreen(0, 0, 0, 0, New Size(1280, 800))
    b.Save("C:\screenshot2.jpg", Imaging.ImageFormat.Jpeg)
End Using
Gruß
MCoder
 
Vielen Dank für die Antwort!

Das mit den Buchstaben ("b" und "a") hab ich nun ausgebessert.

Aber ich verstehe nicht ganz, wo ich diesen Code einbauen soll, damit der Bildname durch die Systemzeit ersetzt wird:
Code:
DateTime.Now.ToShortDateString() + DateTime.Now.ToLongTimeString()

Das mit dem Timer hab ich nun auch geschafft, vielen Dank!

MfG
 
Zuletzt bearbeitet:
zum Beispiel so:
Visual Basic:
Save("C:\screenshot_" + DateTime.Now.ToShortDateString() + DateTime.Now.ToLongTimeString() + ".jpg", ...
Gruß
MCoder
 
Ok, das geht bei mir nicht.
Hab aber jetzt herumprobiert und das ganze so gelöst:

Code:
Save("C:\Umbrella_Data\screenshot" & Format$(Now, "dd-mm-yy hh-mm-ss") & ".jpg", Imaging.ImageFormat.Jpeg)

Vielen Dank für deine Hilfe, hätte ich alles ohne dich nicht geschafft ;)

MfG
Afritus
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück