Bildschirmübertragung möglich in Visual Basic?

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von vedel.

    Bildschirmübertragung möglich in Visual Basic?

    Guten Abend und frohes neues Jahr.

    Ist es möglich in Visual Basic ein Programm zu schreiben mit dem man eine Bildschirmübertragung realisieren kann?
    Ich habe mir schon folgendes überlegt:
    - Man könnte doch mit Hilfe eines Timers Ständig Screenshots machen und die senden


    Mein Problem ist das ich nicht einfach 1920 x 1020 px große Bilder versenden kann da das zu lange dauern würde.
    Hat jemand eine idee wie ich das machen könnte?


    Ich habe bereits eine TCP Basis mit der ich das gerne realisieren könnte.


    Mit freundlichen Grüßen
    vedel
    Du kannst die Bilder als GIF /JPG abspeichern oder als ZIP komprimieeren, da werden sie drastisch kürzer.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja, das geht.
    Du machst in einem bestimmten Intervall Screenshots deines Bildschirms.
    Dann zerteilst du selbige in einige gleichgroße Stücke (16x16 z.B.) und schickst nur die Teile rüber, die sich verändert haben.
    Kleiner Pseudocode:

    VB.NET-Quellcode

    1. Public Class Bildschirm_Senden
    2. Private LetztesBild As Image
    3. Private WithEvents Timer_ As Timer
    4. Public Sub New()
    5. Timer_ = New Timer()
    6. Timer_.Interval = 1000 ' für jede Sekunde
    7. Timer_.Start()
    8. End Sub
    9. Private Sub Timer_Tick() Handles Timer_.Tick
    10. Dim Bild As Image = Screenshot_machen()
    11. If LetztesBild = Nothing Then
    12. GanzesBildSchicken()
    13. Else
    14. Dim Bild_Geteilt(,) As Image = Bild_Teilen(Bild, 16, 16)
    15. Dim LetztesBild_Geteilt(,) As Image = Bild_Teilen(LetztesBild, 16, 16)
    16. For x As Integer = 0 To Bild.Size.Width \ 16 - 1
    17. For y As Integer = 0 To Bild.Size.Height \ 16 - 1
    18. If Bild_Geteilt(x, y).Ungleich(LetztesBild_Geteilt(x, y)) Then
    19. TeilDesBildesSchicken(x, y, Bild_Geteilt(x, y))
    20. Else
    21. Bild_Geteilt(x, y).Dispose()
    22. End If
    23. Next
    24. Next
    25. End If
    26. LetztesBild = Bild
    27. End Sub
    28. End Class
    Info: Dieser Code würde nur korrekt mit Bildschirmgrößen funktionieren, die durch 16 teilbar sind.
    Danke für die antworten!

    Ist es überhaupt möglich base64 in visual basic zu benutzen?
    Also ein Screenshot zu base64 (das ist ja ein String und somit kann ich es einfacher über den Chat versenden) und dann am andren ende wieder zusammen legen.
    Ich weiß das das in CSS geht aber in Visual Basic? oder ist die Idee überhaupt effektiv?

    Mit freundlichen Grüßen
    vedel
    Ja, so wie da.
    Es ist ziemlich sinnlos, Base64 zu verwenden.
    Ein Byte kann 256 verschiedene Zeichen speichern, während bei Base64 nur 64 verwendet werden.
    Deshalb ist es sinnlos, erstmal alles in Base64 umzuwandeln, weil damit erstens zwei unnötige Zwischenschritte entstehen (En- und Dekodierung) und zweitens die Größe der Daten steigt.
    ...außerdem macht es die ganze Sache nicht einfacher,
    man sollte grundsätzlich nie datentypen verwenden, die nicht für diesen einsatzbereich vorgesehen sind. ein string ist nunmal ein string.

    EDIT: eigt meinte ich nur die übertragung wie dort. das nach der kompression in eine datei zu schreiben und die dann wieder zu lesen ist murks. je mehr man mit den daten macht, desto mehr schwachstellen gibt es, an denen sich fehler einschleichen könnten... ;)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „FuFu^^“ ()

    @vedel:
    Du hast nun eine Reihe von Ideen bekommen, wie wir Dein Problem angehen würden.
    Überleg Dir nun alles in Ruhe und stell fest, ob Deine ursprüngliche Frage- bzw. Aufgabenstellung so noch präzise genug ist.
    Formuliere ggf. Dein Problem noch einmal neu.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    okay danke für die hilfe und die tipps:


    Ich bin auf einen kleinen widerstand gestoßen.

    VB.NET-Quellcode

    1. Public Function MakeScreenShot() As Bitmap
    2. Dim Rect As Rectangle = Screen.PrimaryScreen.Bounds
    3. Dim Bmp As Bitmap = New Bitmap(Rect.Width, Rect.Height)
    4. Using Gra As Graphics = Graphics.FromImage(Bmp)
    5. Gra.CopyFromScreen(0, 0, 0, 0, Bmp.Size)
    6. End Using
    7. Return Bmp
    8. End Function


    ich gebe zu das das nicht mein code ist sondern aus einen tutorial.
    Der code befindet sich in einem Timer, dass das bild immer aktuell in einer Picturebox angezeigt wird.
    Nach einer weile friert das program ein und sagt das "Gra.CopyFromScreen(0, 0, 0, 0, Bmp.Size)" oder "Dim Bmp As Bitmap = New Bitmap(Rect.Width, Rect.Height)" ist ein Ungültiger Parameter.

    Durch das einfrieren kann ich auch nicht überprüfen ob das bild tatsächlich gesendet wird.
    Ideen woran das liegen kann?

    Mit freundlichen Grüßen
    vedel

    ps: der timer interval ist auf "1" gestellt.

    EDIT:

    Ich habe es selbst herraus gefunden, lächerlich der fehler.

    man darf einfach nicht

    VB.NET-Quellcode

    1. Dim Rect As Rectangle = Screen.PrimaryScreen.Bounds
    2. Dim Bmp As Bitmap = New Bitmap(Rect.Width, Rect.Height)


    in den loop stellen.

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