Hola
Ich arbeite gerade an einem Script, mit dem man sozusagen live auf anderen PCs malen kann. Client&Server sind in der gleichen Datei.
Spoiler anzeigen
#include <GUIConstants.au3>
#include <Inet.au3>
;~ #NoTrayIcon
Opt("TrayIconDebug", 1)
Opt("MouseCoordMode", 2)
Func _IsPressed($s_hexKey, $v_dll = 'user32.dll')
Local $a_R = DllCall($v_dll, "int", "GetAsyncKeyState", "int", '0x' & $s_hexKey)
If Not @error And BitAND($a_R[0], 0x8000) = 0x8000 Then Return 1
Return 0
EndFunc ;==>_IsPressed
Func _IsActive($handle)
If BitAND(WinGetState($handle), Then
Return 1
Else
Return 0
EndIf
EndFunc ;==>_IsActive
Func _Clear()
GUICtrlDelete($paintfield)
$paintfield = GUICtrlCreateGraphic(0, 0, 500, 280)
HotKeySet("{ENTER}")
Send("{ENTER}")
HotKeySet("{ENTER}", "_Clear")
TCPSend($ConnectedSocket, "func.clear")
EndFunc ;==>_Clear
$dll = DllOpen("user32.dll")
$PublicIP = _GetIP()
$listen = False
$newline = False
Dim $ConnectedSocket = -1
[/autoit] [autoit][/autoit] [autoit]TCPStartup()
[/autoit] [autoit][/autoit] [autoit]$gui = GUICreate("LoL", 800, 600, 0, 0, -1)
GUISetBkColor(0xffffff)
$paintfield = GUICtrlCreateGraphic(0, 0, 800, 580)
GUISetState(@SW_SHOW)
$filemenu = GUICtrlCreateMenu("&File")
$verbinden = GUICtrlCreateMenuitem("Verbinden!", $filemenu)
$resetitem = GUICtrlCreateMenuitem("Reset", $filemenu)
$separator = GUICtrlCreateMenuitem("", $filemenu)
$exititem = GUICtrlCreateMenuitem("Exit", $filemenu)
While 1
$msg = GUIGetMsg()
$curpos = MouseGetPos()
If $listen = True Then
$ConnectedSocket = TCPAccept($ListenSocket)
If $ConnectedSocket >= 0 Then
MsgBox(0, "", "Verbindung hergestellt!")
$listen = False
EndIf
EndIf
Select
Case $msg = $resetitem
_Clear()
Case $msg = $verbinden
$ipaddress = InputBox("Create Sesssion", @LF & @LF & "IP zum connecten:")
$ConnectedSocket = TCPConnect($ipaddress, 10052)
If $ConnectedSocket = -1 Then
$ListenSocket = TCPListen($ipaddress, 10052)
if $ListenSocket == -1 then msgbox(0,"ERROR","Error opening listen socket!")
$listen = True
Else
MsgBox(0, "", "Verbindung hergestellt!")
EndIf
Case $msg = $exititem
ExitLoop
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
EndSelect
If _IsPressed("01", $dll) And _IsActive($gui) Then
GUICtrlSetGraphic($paintfield, $GUI_GR_MOVE, $curpos[0], $curpos[1])
TCPSend($ConnectedSocket, "newline")
While _IsPressed("01", $dll)
$curpos = MouseGetPos()
FileWriteLine("tteszt.txt", $GUI_GR_MOVE)
GUICtrlSetGraphic($paintfield, $GUI_GR_LINE, $curpos[0], $curpos[1])
GUICtrlSetGraphic($paintfield, $GUI_GR_REFRESH)
Sleep(1)
If $ConnectedSocket <> -1 Then
TCPSend($ConnectedSocket, "drawline " & $curpos[0] & " " & $curpos[1] & " ")
EndIf
WEnd
EndIf
If $ConnectedSocket <> -1 Then
$recv = TCPRecv($ConnectedSocket, 2048)
If $recv <> "" Then
If $recv = "newline" Then
$newline = True
Else
$recvdata = StringSplit($recv, " ")
If $recvdata[1] = "drawline" Then
If $newline = True Then
GUICtrlSetGraphic($paintfield, $GUI_GR_MOVE, $recvdata[2], $recvdata[3])
$newline = False
EndIf
GUICtrlSetGraphic($paintfield, $GUI_GR_LINE, $recvdata[2], $recvdata[3])
GUICtrlSetGraphic($paintfield, $GUI_GR_REFRESH)
GUICtrlSetGraphic($paintfield, $GUI_GR_MOVE, $recvdata[2], $recvdata[3])
EndIf
EndIf
EndIf
EndIf
WEnd
GUIDelete($gui)
Exit
Nicht wundern, das Script ist noch lange nicht fertig, erstmal möchte ich das mein TCP-Problem lösen.
Das Problem ist, dass das Script wunderbar klappt solange ich Client&Server auf dem gleichen PC ausführe (also 127.0.0.1 als IP eingebe), sobald ich das Script jedoch auf zwei verschiedenen PCs ausführe, klappts nicht mehr. Ich bin verzweifelt!