Permanenter Screenshot

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Permanenter Screenshot

    Guten abend liebe community
    Ich möchte gerne ein programm machen das jede Millisekunde einen Screenshot macht und diese in einem Ordner als jpeg speichert.
    Gebt mir ein paar tips den Code schnipsel ich dan selbst zusammen
    schonmal danke im vorraus
    Hi!

    Ich glaube, ich kann dir eine Antwort geben, da ich mal dasselbe in einem eigen Programm gebraucht habe:

    VB.NET-Quellcode

    1. Private Sub Pic_Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Pic_Timer.Tick
    2. Pic_Num += 1 'Pic_Num ist die Nummer der Bilder - Sie muss vorher deklariert werden! (Dim Pic_Num As Integer)
    3. SendKeys.Send("{PRTSC}") 'Dieser Befehl simuliert den Tastendruck "Druck", der einen Screenshot in die Zwischenablage kopiert - KeyPreview muss meines Wissens bei deiner Form auf "True" gestellt sein.
    4. If My.Computer.Clipboard.ContainsImage = True Then 'Wenn sich in der Zwischenablage ein Bild befindet, dann...
    5. My.Computer.Clipboard.GetImage.Save(C:\Bilder\Pic_Num & ".jpeg") 'Speichere das Bild in den Ordner C:\Bilder\ unter dem Namen "Pic_Num.jpg"
    6. End If
    7. End Sub


    Das sollte dir helfen!
    Es gibt auch eine funktion für den screenshot:

    VB.NET-Quellcode

    1. Public Function CaptureScreen() As Bitmap
    2. Dim b As New Bitmap(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height)
    3. Dim g As Graphics = Graphics.FromImage(b)
    4. g.CopyFromScreen(0, 0, 0, 0, b.Size)
    5. g.Dispose()
    6. Return b
    7. End Function


    ;)

    ichillah schrieb:

    aber seit wan muss man C deklarieren ??

    Schon immer. Außerdem noch "A", "B", "TickCount" etc ...
    Du hast nicht wirklich Ahnung von dem was du gerade tust oder? Wenn dich schon eine fehlende Klammer (vermutlich also ein CP-Fehler) aus dem Gleichgewicht bringt, magst du vlt erstmal mit was einfacherem anfangen?

    BTW: 1 mal pro MilliSekunde nenn Screenshot machen dürfte mit .Net ziemlich schwierig werden. Der normale Timer schafft ja noch nicht mal diese Genauigkeit und die Thread-Timeslices liegen mW auch eher im Bereich von 10 ms.

    ichillah schrieb:

    ok X-Zat funzt fast aber da kommt die fehlermeldung
    ")" erwartet


    und


    Der name "C" wurde nicht deklariert


    aber seit wan muss man C deklarieren ??
    Sorry, ein Fehler meinerseits, die betreffende Zeile muss so geschrieben werden:

    VB.NET-Quellcode

    1. My.Computer.Clipboard.GetImage.Save("C:\Bilder\" & Pic_Num & ".jpeg")




    @ picoflop:


    Sorry, aber ich verstehe nicht, warum du ihn so scharf anfährst:


    Jeder von uns hat mal angefangen und ich ich weiß nicht, wie du angefangen hast, aber auch ich wollte zu Anfang imemr mehr einbauen, als ich überhaupt Plan von der Materie hatte.
    Tut mir leid, aber ich verstehe seine Situation und ganz ehrlich: Wer hat schon Lust darauf, für eine so kleine Sache wie einen Screenshot erstmal eine komplette Doumentation zu lesen? Ich frage da lieber nach, ob einer 'nen Plan hat.

    MfG,
    X-Zat

    X-Zat schrieb:

    Wer hat schon Lust darauf, für eine so kleine Sache wie einen Screenshot erstmal eine komplette Doumentation zu lesen?

    Oder für überhaupt irgendwas? Lesen und sich richtig in eine Sache reinknien ist schließlich nur sinnloses Tun. Irgendjemand wird's schon mal gemacht haben, das kopiert man dann und schon ist das Problem gelöst. Beim nächsten Problem dann genauso und nach 30 "selbst" geschriebenen Programmen ist man im Grunde kaum schlauer als zuvor und die Standardfrage bleibt "und wo muss ich das hinkopieren?".


    aber auch ich wollte zu Anfang imemr mehr einbauen, als ich überhaupt Plan von der Materie hatte.

    Ich auch. Also habe ich entweder solange gelesen und probiert, bis ich's hingekriegt habe, oder ich habs verworfen. Internet gabs da nämlich noch nicht ;)
    Nun erstmal klappt das so, dann gehts aber ja meist noch weiter und es wird gefragt "Wie bekomme ich ein Teilbereich vom Bildschirm" so hätte man nun in die Doku geschaut was die Überladungen bei CopyFromScreen() bedeuten hätte sich die Frage erledigt, aber so wird ein neuer Thread aufgemacht wo eine Frage gestellt wird die der Threadsteller nicht stellen müsste, wenn er sich eingelesen hätte.
    Das ist der Grund wieso hier die die Programmieren können ständig vom LESEN predigen. Man siehts ja wie die User ihren Copy & Paste Code anwenden und weil der meist natürlich nicht zu 100% auf ihre Anwendung passt wird dann erstmal pauschal "das geht nicht" geantwortet.

    Zum aktuellen Problem, hier müsste JEDER, der auch nur ansatzweise ein wenig Ahnung vom Programmieren hat, sehen das bei der Speichermethode ein Pfad angegeben werden muss und das der vom Type String sein sollte, also NIEMALS einfach nur so da stehen kann, da es ansonsten als Variable Interpretiert wird.
    Hierdraus kann man erkennen das der User anscheint noch kein Plan hat was ihm da vorgesetzt wird und deswegen die Aufforderung erstmal Grundlagen lernen, Lesen usw.

    Ich auch. Also habe ich entweder solange gelesen und probiert, bis ich's hingekriegt habe, oder ich habs verworfen. Internet gabs da nämlich noch nicht ;)


    Das ist es nämlich, früher gabs das INet noch nicht bzw. als es das gab, sicher noch nicht solche Platformen wie diese. Da hatte man nur die Hilfe Referenz oder Bücher und da stand es meistens noch komplizierter drin als wie hier erklärt, weil das von irgendwelchen Genies geschrieben wurde die sich nicht in die Lage eines "Unwissenden" versetzten konnte, also blieb einem oftmals nur der kleine Beispiel Schnipsel oder Beschreibung und damit rumexperimentieren.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Dodo“ ()

    Ich habe dammals mit drei bücher angefangen zum lernen, hatte niemanden wer mir die ganze sachen vorkaut. Ich muß auf mich selber verlassen, selber versuchen, selber denken und schreiben, genau gesagt eigene logik entwickeln und dem entsprechend in Code umsetzen. Foren als Lernmittel zu benutzen, halte ich absolut für unsinn. Besorg dir paar bücher oder openbooks und versuch dich selber einzuarbeiten. Ich weis das ist sehr harte arbeit, wenn man selber was zum lernen anfängt, aber wenn du dir selber nicht helfen kannst, wird dir keiner helfen. ;)
    definiere früher...ich bezeichne auch vor 6 Jahren als früher und auch ich hatte da kein inet zur verfügung und hab mit dem proggen angefangen...das mit dem Screenshot wird wohl nicht nur in .Net zu langsam sein, sondern allgemein...das ganze in einen zwischenspeicher zu speichern sollte denke ich besser gehen und dann erst in einem extra thread als endgültige Datei zu speichern(wird aber wohl auch sehr schnell nen Speicherüberlauf geben) als Video wäre das meiner Meinung nach sowiso besser...Thema DirectX
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    sondern allgemein

    Ist doch relativ einfach abzuschätzen:
    1024 * 768 * 2 * 1000 (und das ist schon konservativ niedrig) => 1.5 GB/s. Da "kopiert" werden muss also noch mal 2. Oder es müssten auf jeden Fall 1.5 GB/s in JPEG konvertiert werden und die Kompression muss mindestens 1:50 sein, denn 30 MB/s auf HDD schreiben (permanent) dürfte gerade noch gehen ... vielleicht!
    "Früher"

    Klar, ich kann euch verstehen, nur ist meine Situation so, dass ich vor 2,5 Monaten angefangen habe, mit VB2008 zu programmieren.
    Davor habe ich auf eigene Faust und ohne Hilfe zwei Jahre lang ausreichend produktive und nützliche MS/DOS (Batch)-Programme geschrieben.

    Und klar, wenn man keinen Internetzugang hat, muss man sich an Bücher lehnen oder man vergisst es einfach.

    Aber ich in meinem Fall habe in meiner bisherigen Zeit mit VB bei Problemen entweder das Galileo-Computing aufgesucht und tatsächlich gelesen oder in Foren nach einer Antwort geschaut.

    Und jetzt sagt mir nicht, man lerne nicht daraus:

    Falls man sich den vorgegebenen oder vorgeschlagenen Syntax auch nur ein wenig anschaut und sich die ToolTips von Microsoft anschaut, kommt man auch schnell hinter den Sinn des ganzen.
    Zumindest habe ich bis jetzt immer zugesehen, dass ich den Sinn und Zweck der Befehle erfolgreich erschließe.
    Und ich habe noch einen Vorteil:

    If My.Computer.Filesystem.FileExists(PFAD\DATEI) = false Then
    BEFEHL
    BEFEHL
    End If

    Ähnelt sehr dem

    if exists "PFAD\DATEI" BEFEHL&&BEFEHL

    Aus MS/DOS. Dass diese Anweisung z.B. aussagt, dass wenn eine definierte Datei in einem definierten Order existiert, soll ein BEFEHL ausgeführt werden, ist in diesem Falle über die Programmsprachen leicht zu erkennen.

    Nun, ja.

    Ich glaube, das Thema ist ausgelutscht.

    MfG,
    X-Zat