Screen-Capture von Client an Server

  • Hallo @all,

    hab mal ne Frage bezüglich TCP.
    Ist es irgendwie möglich als Client einen Screencapture zu machen(klappt noch^^) und diesen dann per TCP an den Server zu schicken?
    Dass soll möglichst schnell geschehen, sodass der Server sehen kann was der Client gerade macht.
    Ich weiß das es möglich ist über TCP Dateien zu versenden. Aber wie ?(
    Geht das mit den Bildern? Oder kann man das überhaupt irgendwie lösen?
    Ich stell mir das in etwa so vor: Client macht sekündlich ein Screen-capture und schickt es an den Server. Dieser speichert das Bild, zeigt es in einer Gui an, löscht es wieder und empfängt das nächste.
    Wenn das irgendwie möglich ist(oder es eine bessere Variante gibt), ich würde mich sehr über Antworten freuen :rolleyes:

    Mfg, Tim

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • Klar geht das
    Speicher den SC in eine Datei (ist das Jpeg? << wäre wohl am besten)
    Diese Datei öffnest du dann im Binary mode FileOpen 16 ist das glaube ich.
    Mit FileRead bekommst du dann einen String diesen kannst du per TCP versenden.
    Der Server kann nun erneut im Binary Mode die Datei schreiben und öffnen.

    Von der Geschwindigkeit wahrscheinlich nicht zu empfehlen. Schätze mal das ca. alle 10 Sekunden oder so ein Bild erscheint.

    Wenn du ein Desktop präsentationsprogramm suchst empfehle ich dir Teamviewer oder Mikogo, VNC tuts auch ;)

    mfg

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • könntest du mir evtl ein kleines Beispiel machen^^
    mach Daten-versand über TCP zum 1. mal^^

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • stimmt das so in etwa? (klappt net -.-)

    [autoit]

    Server:
    while 1
    $msg = TCPRecv($connectedsocket, 99999999999999999)
    if $msg <> "" Then
    $dick = FileOpen(@DesktopDir & "pic2.jpg", 16)
    FileWrite($dick, $msg)
    $bild = FileOpen(@DesktopDir & "pic2.jpg")
    $bild2 = FileRead($bild)
    GUICtrlSetData($Pic1, $bild)
    EndIf
    wend

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    client:
    while 1
    $SC = _ScreenCapture_Capture(@DesktopDir & "pic.jpg")
    $bild = FileOpen(@DesktopDir & "pic.jpg", 16)
    $bild2 = FileRead($bild)
    TCPSend($mainsocket, $bild2)
    Sleep(60000)
    wend

    [/autoit]
    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • schau doch in die Hilfe da steht doch wie man Strings überträgt.
    Mit einer File funktioniert das genauso

    Oder such mal im Forum. Oscar hatte glaube ich ne UDF geschrieben um Dateien per TCP zu übertragen.

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Vieleicht hilft dir das weiter, hab ich mal gemacht, ist noch nicht fertig aber es geht schon:

    Sender
    [autoit]

    Do
    $IP = InputBox("IP", "Gib die IP ein")
    If @error Then Exit
    Until $IP <> ""
    If Not Ping($IP) Then Exit MsgBox(16, "Error", "Diese IP ist nicht Online")
    $File = FileOpenDialog("Wähle die Datei aus", @DesktopDir, "Alle Dateien (*.*)")
    $Name = StringTrimLeft($File, StringInStr($File, "\", 0, -1))
    $Read = FileRead($File)
    TCPStartup()
    $Con = TCPConnect($IP, 80)
    If $Con = -1 Then Exit MsgBox(16, "Error", "Konnte keinen Server auf dieser IP finden")
    $Size = FileGetSize($File)
    TCPSend($Con, "Datei|" & $Name & "|" & $Size)
    Do
    $recv = TCPRecv($Con, 2048)
    If $recv = "0" Then Exit MsgBox(16, "Error", "Der Partner hat die Datei nicht angenommen!")
    Sleep(100)
    Until $recv = "1"
    $SizeOld = $Size
    ProgressOn("Dateiübertragung", "Die Datei wird übertragen", "0%", Default, Default, 18)
    Do
    $x = TCPSend($Con, $Read)
    If @error Then ExitLoop
    $Size -= $x
    ProgressSet($Size / $SizeOld * 100, $Size / $SizeOld * 100 & "%")
    Sleep(100)
    $Read = StringTrimLeft($Read, $x)
    Do
    Sleep(10)
    Until TCPRecv($Con, 2048) = "1"
    Until StringLen($Read) < 1
    TCPSend($Con, "ENDE")
    ProgressOff()
    TCPShutdown()
    MsgBox(64, "Fertig", "Die Datei wurde komplett übertragen")

    [/autoit]
    Empfänger
    [autoit]

    #include <INet.au3>
    TCPStartup ()
    $TCP = TCPListen (_GetIP(),80)
    Do
    $Con = TCPAccept ($TCP)
    Until $Con <> -1
    $Split = StringSplit (_Recv (),"|")
    If $Split[1] = "Datei" Then
    If MsgBox (1,"Dateisendung","Ihnen wird die Datei " & $Split[2] & " gesendet") = 1 Then
    $File = FileSaveDialog ("Wählen sie den Speicherort und Namen",@DesktopDir,"(*." & StringTrimLeft ($Split[2],StringInStr ($Split[2],".",0,-1)) & ")",Default,$Split[2])
    TCPSend ($Con,"1")
    ProgressOn ("Dateiübertragung","Die Datei wird übertragen","0%",Default,Default,18)
    $SizeAdd = 0
    While 1
    $recv = _Recv()
    If $recv = "ENDE" Then
    Exit MsgBox (64,"Feritg","Die Datei wurde komplett übertragen!")
    Else
    $SizeAdd += StringLen ($recv)
    ProgressSet ($SizeAdd / $Split[3] *100,Round ($SizeAdd / $Split[3] *100,2) & "%")
    FileWrite ($File,$recv)
    $recv = ""
    TCPSend ($Con,"1")
    EndIf
    Wend
    Else
    TCPSend ($Con,"0")
    EndIf
    EndIf
    Func _Recv ()
    Local $recvf
    Do
    $recvf = TCPRecv ($Con,1024)
    Sleep (10)
    Until $recvf <> ""
    Return $recvf
    EndFunc

    [/autoit]

    mfg. Jam00