Bildschirm live übertragen

  • hallo, DjDominik und Ich hatten vor, eine art mini Teamviewer zu bauen. nun haben wir auch schon einen Anfang, aber irgendwie funktioniert das nicht so ganz :(

    Serverscript

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------
    AutoIt Version: 3.3.0.0
    Author: DjDominik & Jonathan

    Script Function:
    Sendet Scrennshots an den Client
    #ce ----------------------------------------------------------------------------
    #include <ScreenCapture.au3>
    #include <TCPSend.au3>

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

    Global $hAcc, $hScreenshot, $hSocket, $hIP

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

    $hScreenshot = _ScreenCapture_Capture("")
    _ScreenCapture_SaveImage(@TempDir & "\Screen.jpg", $hScreenshot)

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

    TCPStartup()

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

    $hSocket = TCPListen(@IPAddress1, 2000)

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

    While True = True
    $hIP = SocketToIP($hAcc)
    _TCPFileSend(@TempDir & "\Screen.jpg", $hIP, 2000)
    TCPCloseSocket($hAcc)
    WEnd

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

    Func OnAutoItExit()
    TCPCloseSocket($hSocket)
    EndFunc ;==>OnAutoItExit

    [/autoit]

    Clientscript

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------
    AutoIt Version: 3.3.0.0
    Author: DjDominik & Jonathan

    Script Function:
    Sendet Scrennshots an den Client
    #ce ----------------------------------------------------------------------------
    #include <ScreenCapture.au3>
    #include <TCPSend.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Global $hIP = InputBox("MiniTV Remote", "Die IP des Servers", "", " M")
    If @error Then Exit

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

    TCPConnect($hIP, 2000)

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

    #Region ### START Koda GUI section ### Form=C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Autoit\MiniTV\BackUp\Gui.kxf
    $Gui = GUICreate("MiniTV Remote Screen", 510, 328, 192, 114)
    $Pic = GUICtrlCreatePic("", 8, 8, 492, 276, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    $ExitButton = GUICtrlCreateButton("Beenden", 216, 296, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    _TCPFileRecv(@TempDir & "\Recv.jpg", @IPAddress1, 2000)
    GUICtrlSetImage($Pic, @TempDir & "\Recv.jpg")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]


    und wer es nciht hat: TCPSend: (nicht von DjDominik und mir)

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: DELmE

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

    Script Function:
    _TCPFileRecv

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

    Description:
    Receives a file being sent over a TCP connection

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

    Parameters:
    rFile The name of the file to save to
    Ip The Ip to listen on for the file (default = @IPAddress1)
    Port The port to listen on for incoming file data (default = 7894)

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

    Return value:
    Success _TCPFileRecv returns 1 if the file was successfully received and written
    Failure _TCPFileRecv returns 0 if the function failed

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

    #ce ----------------------------------------------------------------------------
    Func _TCPFileRecv($rFile, $Ip = @IpAddress1, $Port = 7895)
    If $Ip = "" Then $Ip = @IpAddress1
    If $Ip = -1 Then $Ip = @IpAddress1
    If $Port = "" Then $Port = 7894
    If $Port = -1 Then $Port = 7894
    $opt = AutoItSetOption("TCPTimeout", 2000)
    Local $error = False
    Local $buff

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

    $TCPListen = TCPListen($Ip, $Port)

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

    $no_recv_count = 0

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

    $TCPAcc = TCPAccept($TCPListen)
    If $TCPAcc = -1 Then
    $error = True
    Else
    Do
    $TCPRecv = TCPRecv($TCPAcc, 100000)
    If $TCPRecv = "" Then
    $no_recv_count += 1
    Else
    $str = BinaryToString($TCPRecv)
    $buff &= $str
    $no_recv_count = 0
    EndIf
    Until $no_recv_count >= 15

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

    If $buff = "" Then
    $error = True
    Else
    $buff = StringToBinary($buff)
    $rFileOpen = FileOpen($rFile, 16 + 2)
    If $rFileOpen = -1 Then
    $error = True
    Else
    $rFileWrite = FileWrite($rFileOpen, $buff)
    If $rFileWrite = 0 Then
    $error = True
    EndIf
    FileClose($rFileOpen)
    EndIf
    EndIf
    EndIf
    TCPCloseSocket($TCPListen)
    AutoItSetOption("TCPTimeout", $opt)
    If $error = True Then
    Return 0
    Else
    Return 1
    EndIf
    EndFunc ;==> _TCPFileRecv

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

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: DELmE

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

    Script Function:
    _TCPFileSend

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

    Description:
    Sends a file over a TCP connection

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

    Parameters:
    sFile The file to be sent
    Ip The Ip to send on (default = @IPAddress1)
    Port The port to send the file data on (default = 7894)

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

    Return value:
    Success _TCPFileSend returns 1 if the file was successfully sent out
    Failure _TCPFileSend returns 0 if an error occurred

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

    #ce ----------------------------------------------------------------------------
    Func _TCPFileSend($sFile, $Ip = @IPAddress1, $Port = 7895)
    If $Ip = -1 Then $Ip = @IPAddress1
    If $Ip = "" Then $Ip = @IPAddress1
    If $Port = -1 Then $Port = 7894
    If $Port = "" Then $Port = 7894
    $opt = AutoItSetOption("TCPTimeout", 2000)
    Local $error = False
    $sFileOpen = FileOpen($sFile, 16 + 0)
    $sFileRead = FileRead($sFileOpen)
    FileClose($sFileOpen)
    $sFileSize = BinaryLen($sFileRead)

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

    $TCPConn = TCPConnect($Ip, $Port)
    If $TCPConn = -1 Then
    $error = True
    Else
    If $sFileSize < 100000 Then
    $TCPSend = TCPSend($TCPConn, $sFileRead)
    If $TCPSend = 0 Then
    $TCPConn = TCPConnect($Ip, $Port)
    $TCPSend = TCPSend($TCPConn, $sFileRead)
    EndIf
    Else
    $buff = $sFileRead
    Do
    $TCPSend = TCPSend($TCPConn, BinaryMid($buff, 1, 100000))
    If $TCPSend = 0 Then
    $TCPConn = TCPConnect($Ip, $Port)
    $TCPSend = TCPSend($TCPConn, BinaryMid($buff, 1, 100000))
    EndIf
    $buff = BinaryMid($buff, $TCPSend + 1)
    Until BinaryLen($buff) = 0
    EndIf
    EndIf
    TCPCloseSocket($TCPConn)
    AutoItSetOption("TCPTimeout", $opt)
    If $error = True Then
    Return 0
    Else
    Return 1
    EndIf
    EndFunc ;==> _TCPFileSend

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

    Func SocketToIP($SHOCKET)
    Local $sockaddr, $aRet

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

    $sockaddr = DllStructCreate("short;ushort;uint;char[8]")

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

    $aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
    "ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
    If Not @error And $aRet[0] = 0 Then
    $aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
    If Not @error Then $aRet = $aRet[0]
    Else
    $aRet = 0
    EndIf

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

    $sockaddr = 0

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

    Return $aRet
    EndFunc ;==>SocketToIP

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