Screenshot ?

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von kay2k4.

    Screenshot ?

    HAllo Liebe Gemeinde.

    Ich habe da mal wieder eine frage.

    Und zwar möchte ich mir ein kleines tool erstellen, das unteranderem auch in regelmäßigen abständen screenshots vom ganzem Bildschirm macht. (mit Timer)
    So alle anderen sachen habe ich bereits lösen können.
    Bis auf dem code mit dem man screen´s macht.

    Hier erstmal mein Code, (ich muss gleich dazu sagen ich habe mir dem von jemanden abgeschaut)

    VB.NET-Quellcode

    1. Dim S As Screen = Screen.PrimaryScreen
    2. Dim Bmp As Bitmap, G As Graphics
    3. Bmp = New Bitmap(S.Bounds.Width, S.Bounds.Height)
    4. G = Graphics.FromImage(Bmp)
    5. G.CopyFromScreen(S.Bounds.Left, S.Bounds.Top, 0, 0, S.Bounds.Size)
    6. Bmp.Save("C:\Screen" & I & ".png")
    7. G.Dispose()
    8. Bmp.Dispose()


    So bei "I" zeigt er mir ein fehler an, wurde nicht deklariert dabei habe ich die deklarationen oben eingetragen.
    Aber wenn ich I weg amchen und nur "C:\Screen.png" speichert er das bild auch ab, allerdings überschreibt er es jedesmal.
    Könnte mir evt. jemand dabei helfen.

    /e Ich weiß das dieses tehman hier schon ziemlich oft gepostet wurde, allerdings nicht das was ist brauche.

    Danke
    Gruß
    kay2k4
    Das I wird warscheinlich als Zählervariable deklariert sein.
    Das heißt das es jedesmal wenn du ein Bildmachst so abgespeichert wird:

    Bmp.Save("C:\Screen" & 1 & ".png")
    Bmp.Save("C:\Screen" & 2 & ".png")
    Bmp.Save("C:\Screen" & 3 & ".png")

    Dadurch wird dann auch das Bild nicht überschrieben da es einen anderen Namen erhählt.
    Außerdem machst du ein Bild im bmp Format und speicherst es einfach als png ab.
    Das musst du richtig abspeichern.

    Versuche es mal so:

    VB.NET-Quellcode

    1. Dim I as Integer = 0


    VB.NET-Quellcode

    1. I += 1
    2. Dim S As Screen = Screen.PrimaryScreen
    3. Dim Bmp As Bitmap, G As Graphics
    4. Bmp = New Bitmap(S.Bounds.Width, S.Bounds.Height)
    5. G = Graphics.FromImage(Bmp)
    6. G.CopyFromScreen(S.Bounds.Left, S.Bounds.Top, 0, 0, S.Bounds.Size)
    7. Bmp.Save("C:\Screen" & I & ".png", System.Drawing.Imaging.ImageFormat.PNG)
    8. G.Dispose()
    9. Bmp.Dispose()


    EDIT:
    Aber die zählervariable wird nicht abgespeichert wenn du es schließt.
    Desswegen werden dann die Bilder überschrieben wenn du das Programm wieder neustartest.
    Desswegen empfehle ich, dass du dir die Zählervariable abspeicherst.
    Mein Vorschlag:

    [VB 2008] [TUTORIAL] Die My.Setting Speichermethode
    MFG
    GOOGLE ist mein Meister :)

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

    Oh sehe ich auch gerade, der sollte eigendlich mit im code sein, allerdings habe ich ihn momentan nicht drin, vllt habe ich versehntlich gelöscht,
    Aber wie gesagt auch mit deklaration hat er jedesmal das screen.png überschrieben.
    Das ist ja was er nicht soll, er soll sagen wir in einen neuen ordner immer neue screens erstellen.
    Tut mir leid das ich dir das sagen muss:
    Den Weihnachtsmann gibt es nicht ^^

    Ne:
    wenn du dir meinen Post genau durchließt findest du deinen fehler bestimmt selber.
    Meine oben angefürte Lösung funktionier einwandfrei.

    MFG
    GOOGLE ist mein Meister :)
    Ja du hast recht funktioniert auch alles.
    Allerdings ich bin erst seit 2 Wochen dran VB zu lernen, ist klar das ich noch nicht alles kann, deshalb muss ich erstmal studieren wie das mit der my.settings geht (Wie es mit Textbox & my.settings geht weiß ich, aber leider weiß ich nicht wie ich meine zahlenvariable in my.settings speicher.)

    Wie gesagt ich kann VB noch nicht wie Bill gattes.
    aber leider weiß ich nicht wie ich meine zahlenvariable in my.settings speicher


    Das ist genau das selbe:

    VB.NET-Quellcode

    1. Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    2. My.Settings.zähler = I
    3. My.Settings.Save()
    4. End Sub
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. I = My.Settings.zähler
    7. End Sub


    Der Typ der Settings halt auf Integer

    MFG
    GOOGLE ist mein Meister :)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Bady“ ()

    Da es jetzt geht habe ich noch eine kleine frage.
    Ist es möglich das programm erst zu starten wenn ein bestimmtes programm/fenster/java applet in der Taskbar an ist.
    Sagen wir mal bei msn, nur als bsp. wenn msn offen ist das er denn immer screen´s macht, und wenn msn closed ist wieder aufhört.
    Ich möcht nur wiesen ob es geht, wenn nicht brauche ich garnicht erst versuchen, googlen usw...

    Gruß
    kay2k4
    Hay danke für den tipp ich habe da gleich mal was ausprobiert,
    leider bisher ohne erfolg, liegt bestimmt an einem kleinen fehler.
    Bzw. brauche ich die deklaration für folgenden code.

    VB.NET-Quellcode

    1. If isTaskActive("java.exe") Then
    2. 'Hier kommt mein sreencode rein
    3. ...
    4. ...
    5. ...
    6. Else
    7. System.Threading.Thread.Sleep(60000)
    8. end if


    So aber bei If isTaskActive("java.exe") Then der name "isTaskActive" wurde nicht deklariert
    So, aber ich möchte es außerdem auch so machen, das er bei "else" also wenn der prozess nicht aktiv ist wartet und erneut prüft.
    das habe ich mit "System.Threading.Thread.Sleep(60000)" wie mache ich es den das er die prozesdur erneut durch geht, mit do loop ???
    Super danke es hat geklappt.
    nur brauche ich halt noch die sleep funktion.
    aber wenn ich nur "System.Threading.Thread.Sleep(60000)" mache bekomme ich immer den fehler "Keine Rückmeldung"
    den ich schon öffter bekommen habe wenn ich threading sleep funktion bentzt habe.
    Ein hätte ich da aber noch.
    Da es ja möglich ist screen´s zu machen sobald eine anwendung leuft, das klappt ja jetzt auch alles.
    Aber geht es eigendlich auch wenn man eine bestimmte internetseite aufruft.
    Sagen wir mal, wenn google offen ist soll das programm screen´s machen, und wenn google wieder closed ist soll das programm einfach schlaffen bis google wieder offen ist.
    Wie gesagt google ist jetzt nur als beispiel.
    Also ist das überhaupt möglich.

    Gruß
    kay2k4