zu dem datenübertragungsproblem,
Wieso nicht den Port des Chatclients verwenden?
Oder kann jeweils nur 1 Anwendung 1 Port nützen, das wäre mir neu^^
Dann einfach IP's austauschen, der der senden will fungiert als Server, etc...
zu dem datenübertragungsproblem,
Wieso nicht den Port des Chatclients verwenden?
Oder kann jeweils nur 1 Anwendung 1 Port nützen, das wäre mir neu^^
Dann einfach IP's austauschen, der der senden will fungiert als Server, etc...
Wow,
Respekt, das Skript hats echt in sich^^
Habs jetzt nur mal so überflogen, aber für das was es kann, ist es ziemlich kurz
gute Arbeit würd ich sagen ![]()
Hab mich auch mal an einem Chat probiert (nicht jetzt, schon länger her) LINK
Hat aber bissl mehr zeilen xD, aber auch mehr Funktionen (keine doppelten Nicknames, Admin-Kick / Ban, etc)
Ich hab meines an ein paar Stellen allerdings sehr kompliziert geschrieben (finde ich zumindest, lasse mich gerne anderweitig belehren)
Außerdem benutze ich den GuiOnEventMode..
So, mal wieder weitergeskripted und ich denk das wird jetzt die letzte Version sein...(vorraussichtlich)
Was eventuell noch kommen wird ist ein Flüster-Funktion und eine votekick-Funktion!
~~ Server ~~
* Admin kann User bannen: Perm/Temp
~~ Client ~~
* Logfile erweitert
* GUI rezisefähig
Im Anhang ist der Sourcecode und den 1.Post update ich auch mal.
So, mal wieder den Thread hochpushen ![]()
Ne Spaß beiseite, hab ne neue Version ![]()
Update siehe 1.Post
Ich häng die Dateien auch in diesem Post an!
Neuerungen:
~~ Server ~~
* Admin kann mitchatten
* Kommandobox entfernt (Kommandos jetzt in den Admin-Chat schreiben)
* Ein paar kleine Bugs entfernt
~~ Client ~~
* Neues Pattern für die IP
* Andere Clients werden angezeigt
* GUI überarbeitet
* Style änderbar (Schriftart / Schriftgröße / Schriftfarbe)
hmm..
Ich weiß is veraltet, aber ich wollte mich einfach bedanken xD
Wollte so etwas schon fast selber schreiben, war aber dann zu beschäftigt.
Ich hab auch mal nen Rechner gebastelt, wenn du willst kannst du ihn haben ![]()
Is im GUIOnEventMode geschrieben:
Viel Spaß ![]()
EDIT: Hab ihn grad noch überarbeitet, ist jetzt um 70 Zeilen kürzer ![]()
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]#Region ### START Koda GUI section ### Form=E:\Thomas\Programme\Programmieren\AutoIT v3\AutoIT-Skripte\Rechner\Rechner.kxf
$Form1_1 = GUICreate("Rechner", 281, 253, 191, 129)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
$Group1 = GUICtrlCreateGroup("Ziffern", 8, 64, 129, 185)
GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
$Button1 = GUICtrlCreateButton("1", 16, 88, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button2 = GUICtrlCreateButton("2", 56, 88, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button3 = GUICtrlCreateButton("3", 96, 88, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button4 = GUICtrlCreateButton("4", 16, 128, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button5 = GUICtrlCreateButton("5", 56, 128, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button6 = GUICtrlCreateButton("6", 96, 128, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button7 = GUICtrlCreateButton("7", 16, 168, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button8 = GUICtrlCreateButton("8", 56, 168, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button9 = GUICtrlCreateButton("9", 96, 168, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button10 = GUICtrlCreateButton("0", 56, 208, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button11 = GUICtrlCreateButton(".", 16, 208, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlSetOnEvent(-1, "_SetData")
$Group2 = GUICtrlCreateGroup("Rechnugsarten", 144, 64, 129, 185)
GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
$Button12 = GUICtrlCreateButton("-", 152, 88, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button13 = GUICtrlCreateButton("+", 152, 128, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button14 = GUICtrlCreateButton("*", 152, 168, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button15 = GUICtrlCreateButton("/", 152, 208, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button16 = GUICtrlCreateButton("(", 192, 88, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button17 = GUICtrlCreateButton(")", 232, 88, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button18 = GUICtrlCreateButton("Sqrt", 192, 128, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button19 = GUICtrlCreateButton("1/x", 192, 208, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button21 = GUICtrlCreateButton("=", 232, 208, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button20 = GUICtrlCreateButton("x²", 192, 168, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button22 = GUICtrlCreateButton("DEL", 232, 128, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
$Button23 = GUICtrlCreateButton("CL", 232, 168, 35, 33, $WS_GROUP)
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlSetOnEvent(-1, "_SetData")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup("Output", 8, 0, 265, 65)
GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
$Input1 = GUICtrlCreateInput("", 16, 24, 249, 31, BitOR($ES_CENTER, $ES_AUTOHSCROLL, $ES_READONLY))
GUICtrlSetFont(-1, 14, 400, 0, "Calibri")
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
Sleep(100)
WEnd
Func _SetData()
Switch @GUI_CtrlId
Case $Button18
GUICtrlSetData($Input1, Sqrt(Execute(GUICtrlRead($Input1))))
Case $Button19
GUICtrlSetData($Input1, (1 / (Execute(GUICtrlRead($Input1)))))
Case $Button20
GUICtrlSetData($Input1, Execute(GUICtrlRead($Input1) * Execute(GUICtrlRead($Input1))))
Case $Button21
GUICtrlSetData($Input1, Execute(GUICtrlRead($Input1)))
Case $Button22
GUICtrlSetData($Input1, StringTrimRight(GUICtrlRead($Input1), 1))
Case $Button23
GUICtrlSetData($Input1, "")
Case Else
GUICtrlSetData($Input1, GUICtrlRead($Input1) & GUICtrlRead(@GUI_CtrlId))
EndSwitch
EndFunc ;==>_SetData
Func _Exit()
Exit
EndFunc ;==>_Exit
hmm..
Hast du ne Firewall aktiviert? - wenn ja dann schalt sie mal ab und probier dann nochmal verbinden
Ich hab gestern noch einiges herumgeschraubt am Programm aber bin zurzeit nicht zuhause, und kann es daher nicht uppn (Skript nicht am Laptop -.-)
Zu deinem Problem mit der Kommandobox; Hab schon eine Idee an was das liegen könnte ich such mir den Teil oben kurz raus und post ihn dann.
Moment ![]()
EDIT:
Ersetz mal die Funktion _Exit mit folgender Funktion, dann müsste es klappen..
[autoit]
Func _Exit()
If TrayItemGetText(@TRAY_ID) = "Beenden" Then Exit
If TrayItemGetText(@TRAY_ID) = "Server neu starten" Then
$bRestart = True
Exit
ElseIf StringLower($sCmd) = "/restart" Then
$bRestart = True
Exit
ElseIf GUICtrlRead(@GUI_CtrlId) = "Server neu starten" Then
$bRestart = True
Exit
EndIf
Exit
EndFunc ;==>_Exit
EDIT 2 xD
Hatt das Skript doch noch auf meim USB-Stick ![]()
Ich Update mal den 1.Post.
Hab einiges hinzugefügt/verbessert etc
Neuerungen:
~~ Server ~~
- Kommandoboxbefehle nun ohne "/" (Quit, Restart, Kick "Clientname", sayall "Text")
- System mit Client verbindet sich/trennt Verbindung überarbeitet: Die Nachricht wird nicht einfach an alle verschickt, sondern es wird ein Servercommand an alle Clients versendet (//UserQuit(Username)) Ich weiß unbedeutend, aber ich wollts erwähnen *gg*
- Log-File bisschen verändert (Serverstartup-, Servershutdownmeldungen hinzugefügt)
~~ Client ~~
- NEUE GUI xD (Andere Clients werden angezeigt)
- Ini-Datei in der die letzte IP und der letzte Name gespeichert wird
Noch vorhandene Probleme:
Ich brauch noch ein 'richtiges' Pattern für eine IP (StringRegExp), mein derzeitige lässt es zu, dass HINTER der IP noch jedes mögliche Zeichen steht -.-
Also wer Lust hat, kann eins basteln xD (Ich werd den jenigen natürlich erwähnen!)
MfG oetzn
dann würde ich das nicht über Memory lösen,
hat WoW sowas wie einen 'Cheat-Schutz' ? hab noch nie wow gespielt, daher die frage xD
Die könnte dir da nämlich dreinreden wenn du Memory lesen/schreiben willst xD
zu deinem Relog-Problem, einfach mal schauen, mit AutoIt Window Info Tool, welches Pixel schwarz wird wenn du dich ausloggst und dann einfach
[autoit][/autoit][autoit][/autoit][autoit]If Pixelgetcolor($x,$y) = $colour_schwarz Then Relog()
[/autoit][autoit][/autoit][autoit][/autoit]so ausm kopf geschrieben xD
naja das mit der Grafik wie stellst du dir das vor?
Du kannst es mit PixelGetColor versuchen, das gibt dir die Farbe zurück die ein Pixel hat.
Das bringt dir insofern was, da du vorher mit AutoIt Window Info die Farbe des Pixels herausfinden kannst, danach musst du sie nur noch abgleichen (Für Syntax einfach die Hilfe fragen
)
Und das mit Speicher, Google mal nach NomadMemory.au3; mit der kannst du Speicheradressen auslesen, schreiben etc..
Da machst du das selbe wie beim Pixel nur das du halt statt mit 'Window Info' über ein Testskript den Wert in der Speicheradresse auslesen musst.
Noch Fragen?
EDIT: Ach verdammt zu langsam -.-
Ach ja, das mit dem Bot hätt ich fast vergessen xD
Muss es denn über Internet sein?
Ist der PC nicht im lokalen Netzwerk? - Wenn ja dann einfach TCPSend ![]()
Update gemacht ![]()
Neuerungen:
~~ Server ~~
- Ein Client wird gekickt, wenn er einen Namen benutzt der schon in Verwendung ist.
- Clients können generell gekickt werden.
- Kommandobox hinzugefügt (/Quit, /Restart, /Kick "Clientname")
- Log-File (Chat)
- Ein paar kleine, für den Anwender nicht bedeutende, Änderungen ![]()
- Zulassungsabfrage, wenn ein Client connected
~~ Client ~~
- TrayItem(Beenden) hinzugefügt
- Den $ES_READONLY-Style vom ListView entfernt => Spalten kann man jetzt nach belieben vergrößern
- GUI vom Chat wird nicht sofort geöffnet, zuerst wird gewartet, ob man überhaupt connecten darf (Siehe Server)
- Meldung, wenn die Verbindung zum Server verloren ging
- Eigener Nickname wird in den Titel des Chats eingefügt
So, das wars eigentlich ![]()
Hat noch jemand Wünsche oder Anliegen? - Mir persönlich gefällt die Art der GUI des Clients nicht sehr, habt ihr Vorschläge für eine bessere?
Es kann gerne jemand ne neue GUI erstellen, wenn er möchte. Ich werd ihn/sie dann natürlich im Skript erwähnen ![]()
machs doch mit Switch - Endswitch und
[autoit]
$hGui1 = GUICreate("GUI1")
GUICtrlCreateButton("OK", ....)
GUICtrlSetOnEvent(-1, "ButtonClick")
$hGui2 = GUICreate("GUI2")
GUICtrlSetOnEvent(-1, "ButtonClick")
$hGui3 = GUICreate("GUI3")
GUICtrlSetOnEvent(-1, "ButtonClick")
$hGui4 = GUICreate("GUI4")
GUICtrlSetOnEvent(-1, "ButtonClick")
While 1
WEnd
Func ButtonClick()
Switch @GUI_WinHandle
Case $hGui1
GUISetState(@SW_HIDE, $hGui1)
Case $hGui2
GUISetState(@SW_HIDE, $hGui2)
Case $hGui3
GUISetState(@SW_HIDE, $hGui3)
Case $hGui4
GUISetState(@SW_HIDE, $hGui4)
EndSwitch
EndFunc ;==>ButtonClick
Sollte eigentlich so funktionieren..
EDIT: Ach ne zu langsam -.-
ok, ja so gehts natürlich auch..
vl bau ich das ein, aber derzeit bin ich mit meiner Lösung auch zufrieden, den in dem Fall ist der Mensch klüger als die Au3Check.exe xD
da ja der Mensch weiß, dass die Funktion die die Au3Check nicht kennt, NIE aufgefrufen wird.
Aber natürlich ist es schöner wenn erst gar kein Error kommt ![]()
Danke für die Funktion, ich werd sie mir mal speichern ![]()
sry, ich weiß der Thread ist tot, aber für alle die mal auf den Thread stoßen und eine Lösung wollen => TCP Multichat Client+Server
hmm..
schwieriges Problem xD
wenn ich das verwende:
[autoit]
if _VersionCompare(@AutoItVersion,"3.3.1.0") = - 1 Then
AdlibEnable("TrayTipTimer")
Else
AdlibRegister("TrayTipTimer")
EndIf
dann kommt trotzdem die Fehlermeldung, dass er AdlibRegister nicht kennt -.-
obwohl er die Funktion ja gar nicht verwendet...
Also entweder jeder schreibt sich das für die Version um, die er benützt, oder er verwendet die Beta ^^...
Im Moment sehe ich keine andere Lösung, sry
EDIT: Oder doch ![]()
Ich Update den Quellcode im 1. Post dann funzt das.
Lösung: man muss die Errormeldung der Au3Check.exe ingnorieren (Continue Anyway drücken) weil das Programm ja durch die If-Abfrage sowiso nicht zu der Funktion kommt, die er nicht kennt ![]()
Also viel Spaß ![]()
ZitatSollte mit der derzeitigen Beta-Version von AutoIT problems funktionieren.
in den normalen AutoIT release heißt die Funktion AdlibEnable,
Moment ich werd das schnell fixen ![]()
hi Leute,
ich weiß, gibt x-Verschiedene Multichats aber ich wollte meinen trotzdem posten xD
WICHTIG: Er funktioniert(so wie er jetzt geschrieben ist) nur im lokalen Netzwerk!
Wäre aber denk ich keine große Sache, ihn so umzuschreiben, dass er lokal und im Internet gleichzeitig funktioniert!
Für Anregungen, Kritik und Bugmeldungen bin ich gerne offen!
Server-Quellcode:
#include <Array.au3>
#include <File.au3>
#include <GuiListView.au3>
#include <Misc.au3>
#include <Timers.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <EditConstants.au3>
#include <ButtonConstants.au3>
#include <Date.au3>
$tGes = _Timer_Init()
[/autoit] [autoit][/autoit] [autoit]LogFile("@compiled: " & @Compiled, "Programm")
LogFile("Pfad zur Exe: " & @AutoItExe, "Programm")
LogFile("PID: " & @AutoItPID, "Programm")
LogFile("AutoItVersion: " & @AutoItVersion, "Programm")
LogFile("", "Programm")
If TCPStartup() <> 1 Then
MsgBox(48, "Error", "TCP-Service konnte nicht gestartet werden!" & @LF & _
"Programm wird beendet!")
Exit
EndIf
LogFile("TCP-Service erfolgreich gestartet", "Programm")
[/autoit] [autoit][/autoit] [autoit]Global Const $sTitle = "Chat Server"
Global Const $sGUITitle = "Client-Verwaltung"
Global Const $sIP = @IPAddress1
Global Const $sPort = 2150
Global Const $MainSocket = TCPListen($sIP, $sPort)
Global Const $sPCNetworkName = @ComputerName
Global Const $sBanListPath = @ScriptDir & "\Banlist.txt"
LogFile("Konstanten definiert", "Programm")
LogFile("", "Programm")
LogFile("Server-IP: " & $sIP, "Programm")
LogFile("Server-Port: " & $sPort, "Programm")
LogFile("Computername: " & $sPCNetworkName, "Programm")
LogFile("", "Programm")
LogFile("Abhör-Anschluss für eingehende Verbindung (Socket): " & $MainSocket, "Programm")
LogFile("", "Programm")
If Not FileExists($sBanListPath) Then _FileCreate($sBanListPath)
[/autoit] [autoit][/autoit] [autoit]Global $sTitleChat = "Multichat"
Global $tTrayTipTimer
Global $bRestart = False
Global $sDataAdmin
Global $iMaxIndexClientList
Global $iHours
Global $iMins
Global $iSecs
Global $iLastMins
Global $iLastHour
Global $Time
Global $aBanList[1]
Global $BanMode
Global $sBannedUser
_FileReadToArray($sBanListPath, $aBanList)
_ArrayDelete($aBanList, 0)
Dim $aUsers[1][4]
[/autoit] [autoit][/autoit] [autoit]If _Singleton($sGUITitle) = 0 Then
LogFile("Zweite Instanz geschlossen! - Nur eine Instanz erlaubt!", "Programm")
LogFile("", "Programm")
Exit
EndIf
Opt("TrayOnEventMode", 1)
Opt("GuiOnEventMode", 1)
Opt("TrayAutoPause", 0)
Opt("TrayMenuMode", 1)
If _VersionCompare(@AutoItVersion, "3.3.1.0") = -1 Then
AdlibEnable("RefreshStuff")
AdlibEnable("CheckSocket")
AdlibEnable("CheckConnection", 2000)
AdlibEnable("CheckIncoming")
Else
AdlibRegister("RefreshStuff")
AdlibRegister("CheckSocket")
AdlibRegister("CheckConnection", 2000)
AdlibRegister("CheckIncoming")
EndIf
TrayTipExt("Server IP: " & $sIP & "" & @LF _
& "Computername: " & $sPCNetworkName)
TraySetToolTip("Server IP: " & $sIP & "" & @LF _
& "Computername: " & $sPCNetworkName)
#Region ### TrayMenu
TrayCreateItem("Verwaltung")
TrayItemSetOnEvent(-1, "ToggleClientGUI")
TrayCreateItem("IP in Zwischenablage kopieren")
TrayItemSetOnEvent(-1, "CopyIPClipboard")
TrayCreateItem("Chatchronik öffnen")
TrayItemSetOnEvent(-1, "OpenChatLog")
TrayCreateItem("")
TrayCreateItem("Server neu starten")
TrayItemSetOnEvent(-1, "_Exit")
TrayCreateItem("Beenden")
TrayItemSetOnEvent(-1, "_Exit")
TrayCreateItem("")
TrayCreateItem("Chat beitreten (als Admin)")
TrayItemSetOnEvent(-1, "_AdminChat")
#EndRegion ### TrayMenu
#Region ### VerwaltungGUI
$hClientverwaltung = GUICreate($sGUITitle, 312, 248, 198, 131)
$Group1 = GUICtrlCreateGroup("Verbundene Clients ", 0, 0, 185, 241)
$ListView1 = GUICtrlCreateListView("Name|IP", 8, 16, 169, 217)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 70)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 95)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Kick", 192, 8, 115, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "KickSelected")
$Button2 = GUICtrlCreateButton("GUI beenden", 192, 104, 115, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "ToggleClientGUI")
$Button3 = GUICtrlCreateButton("Server beenden", 192, 136, 115, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "_Exit")
$Button4 = GUICtrlCreateButton("Server neu starten", 192, 168, 115, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "_Exit")
$Button5 = GUICtrlCreateButton("Erneuern", 192, 72, 115, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "ShowClients")
$Button6 = GUICtrlCreateButton("Bann", 192, 40, 115, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "BanSelected")
GUISetState(@SW_HIDE, $hClientverwaltung)
#EndRegion ### VerwaltungGUI
#Region ### ChatGUI
$hMainGUI = GUICreate($sTitleChat, 750, 424, 203, 150)
$Edit1 = GUICtrlCreateEdit("", 0, 0, 617, 393, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_READONLY, $ES_WANTRETURN, $WS_HSCROLL, $WS_VSCROLL))
GUICtrlSetData(-1, "")
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
GUICtrlSetCursor(-1, 2)
$Input1 = GUICtrlCreateInput("", 0, 392, 521, 29)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
GUICtrlSetCursor(-1, 5)
$Button6 = GUICtrlCreateButton("Senden", 520, 392, 97, 29, BitOR($BS_DEFPUSHBUTTON, $BS_CENTER, $BS_VCENTER, $WS_GROUP))
GUICtrlSetOnEvent(-1, "_Send")
$ListView2 = GUICtrlCreateListView("", 616, 0, 129, 420)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 50)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
GUISetState(@SW_HIDE, $hMainGUI)
#EndRegion ### ChatGUI
#Region ###
$hBanMsgBox = GUICreate("Wirklich verbannen?", 342, 103, 206, 133, BitOR($WS_CAPTION, $WS_BORDER, $WS_CLIPSIBLINGS))
$Label1 = GUICtrlCreateLabel("", 16, 24, 308, 20)
$Button7 = GUICtrlCreateButton("Permanent", 48, 64, 75, 25, $WS_GROUP)
$Button8 = GUICtrlCreateButton("Temporär", 128, 64, 75, 25, $WS_GROUP)
$Button9 = GUICtrlCreateButton("Gar nicht", 208, 64, 75, 25, $WS_GROUP)
GUISetState(@SW_HIDE, $hBanMsgBox)
#EndRegion ###
GUISetOnEvent($GUI_EVENT_CLOSE, "ToggleClientGUI", $hClientverwaltung)
GUISetOnEvent($GUI_EVENT_CLOSE, "HideChatGUI", $hMainGUI)
GUICtrlSetState($Input1, $GUI_FOCUS)
[/autoit] [autoit][/autoit] [autoit]Global $hListView1 = GUICtrlGetHandle($ListView1)
Global $hListView2 = GUICtrlGetHandle($ListView2)
_GUICtrlListView_AddColumn($hListView2, "Andere Clients", 125)
[/autoit] [autoit][/autoit] [autoit]While 1
Sleep(100)
WEnd
Func CheckSocket()
$TempSocket = TCPAccept($MainSocket)
If $TempSocket <> -1 Then
LogFile("Verbindungsanfrage von " & SocketToIP($TempSocket), "Programm")
LogFile("", "Programm")
If MsgBox(48 + 4, "Neuer Cient", "Ein neuer Client will sich mit dem Server verbinden!" & @LF & _
"Daten:" & @LF & _
"IP: " & SocketToIP($TempSocket) & @LF & _
"Zulassen?", 15) = 6 Then
ReDim $aUsers[UBound($aUsers, 1) + 1][4]
$aUsers[UBound($aUsers, 1) - 1][0] = $TempSocket
$aUsers[UBound($aUsers, 1) - 1][1] = SocketToIP($TempSocket)
TrayTipExt("Neuer Client verbunden: '" & $aUsers[UBound($aUsers, 1) - 1][1] & "'")
TCPSend($TempSocket, "//Accept")
Else
TCPCloseSocket($TempSocket)
EndIf
EndIf
$TempSocket = ""
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>CheckSocket
[/autoit] [autoit][/autoit] [autoit]Func CheckIncoming()
Local $aData[1]
Local $TempUsers
For $iIndex = 0 To UBound($aUsers, 1) - 1
$TempData = TCPRecv($aUsers[$iIndex][0], 8192)
Select
Case StringLeft($TempData, 6) = "//Name"
$TempData = StringTrimLeft($TempData, 7)
$TempData = StringTrimRight($TempData, 1)
If $TempData = "" Then ContinueCase
$aUsers[$iIndex][2] = $TempData
$TempSearchResultName = _ArraySearch($aUsers, $TempData, _ArraySearch($aUsers, $TempData) + 1)
If $TempSearchResultName <> -1 And StringLen($aUsers[$TempSearchResultName][2]) > 0 Then
TCPSend($aUsers[$TempSearchResultName][0], "//Kick(DoubleName)")
TCPCloseSocket($aUsers[$TempSearchResultName][0])
For $i = 1 To UBound($aUsers, 1) - 1
If $aUsers[$i][0] = "" Then ContinueLoop
TCPSend($aUsers[$i][0], "Server|" & $sIP & "|'" & $aUsers[$TempSearchResultName][2] & "' wurde vom Server gekickt, weil der Name bereits vergeben ist!")
LogFile("Server => " & $aUsers[$i][2] & ": '" & $aUsers[$TempSearchResultName][2] & "' wurde vom Server gekickt, weil der Name bereits vergeben ist!", "Chat")
Next
WriteMemo("'" & $aUsers[$TempSearchResultName][2] & "' wurde vom Server gekickt, weil der Name bereits vergeben ist!", "Server")
$aUsers[$TempSearchResultName][0] = ""
$aUsers[$TempSearchResultName][1] = ""
$aUsers[$TempSearchResultName][2] = ""
$aUsers[$TempSearchResultName][3] = ""
EndIf
For $i = 1 To UBound($aUsers, 1) - 1
$TempUsers = $aUsers[$i][2] & ";" & $TempUsers
Next
For $i = 1 To UBound($aUsers, 1) - 1
If $aUsers[$i][0] = "" Then ContinueLoop
TCPSend($aUsers[$i][0], "//Users(" & $TempUsers & ")")
If $TempSearchResultName = -1 Then LogFile("Server => " & $aUsers[$i][2] & ": '" & $TempData & "' ist dem Chat beigetreten! IP: (" & $aUsers[$i][1] & ")", "Chat")
Next
WriteMemo("'" & $TempData & "' ist dem Chat beigetreten!", "Server")
_GUICtrlListView_AddItem($hListView2, $TempData)
Case StringLeft($TempData, 5) = "//Key"
$TempData = StringTrimLeft($TempData, 6)
$TempData = StringTrimRight($TempData, 1)
If $TempData = "" Then ContinueCase
[/autoit] [autoit][/autoit] [autoit]$aUsers[$iIndex][3] = $TempData
$TempSearchResultKey = _ArraySearch($aBanList, $TempData)
If $TempSearchResultKey <> -1 Then
$sBannedUser = _ArraySearch($aUsers, $TempData)
TCPSend($aUsers[$sBannedUser][0], "//Kick(Banned)")
TCPCloseSocket($aUsers[$sBannedUser][0])
For $i = 1 To UBound($aUsers, 1) - 1
If $aUsers[$i][0] = "" Then ContinueLoop
TCPSend($aUsers[$i][0], "Server|" & $sIP & "|'" & $aUsers[$sBannedUser][2] & "' ist ein verbannter User!")
LogFile("Server => " & $aUsers[$i][2] & ": '" & $aUsers[$sBannedUser][2] & "' ist ein verbannter User!", "Chat")
Next
Else
TCPSend($aUsers[$iIndex][0], "//Allowed")
EndIf
$aUsers[$sBannedUser][0] = ""
$aUsers[$sBannedUser][1] = ""
$aUsers[$sBannedUser][2] = ""
$aUsers[$sBannedUser][3] = ""
Case StringLeft($TempData, 6) = "//Quit"
$TempData = StringTrimLeft($TempData, 7)
$TempData = StringTrimRight($TempData, 1)
If $TempData = "" Then ContinueCase
$TempSearch = _ArraySearch($aUsers, $TempData)
TCPCloseSocket($aUsers[$TempSearch][0])
$aUsers[$TempSearch][0] = ""
$aUsers[$TempSearch][1] = ""
$aUsers[$TempSearch][2] = ""
For $i = 1 To UBound($aUsers, 1) - 1
If $aUsers[$i][0] = "" Then ContinueLoop
TCPSend($aUsers[$i][0], "//UserQuit(" & $TempData & ")")
LogFile("Server => " & $aUsers[$i][2] & ": '" & $TempData & "' hat den Chat verlassen!", "Chat")
Next
WriteMemo("'" & $TempData & "' hat den Chat verlassen!", "Server")
_GUICtrlListView_DeleteItem($hListView2, _GUICtrlListView_FindText($hListView2, $TempData))
Case StringLen($TempData) > 0
_ArrayAdd($aData, $TempData)
EndSelect
Next
If StringLen($aData[(UBound($aData, 1) - 1)]) > 0 Then
For $iIndex = 1 To UBound($aData, 1) - 1
[/autoit] [autoit][/autoit] [autoit]For $i = 1 To UBound($aUsers, 1) - 1
If $aUsers[$i][0] = "" Then ContinueLoop
TCPSend($aUsers[$i][0], $aData[$iIndex])
$aTempData = StringSplit($aData[$iIndex], "|", 2)
LogFile($aTempData[0] & " => " & $aUsers[$i][2] & ": " & $aTempData[2], "Chat")
Next
WriteMemo($aTempData[2], $aTempData[0])
Next
EndIf
[/autoit] [autoit][/autoit] [autoit]$TempUsers = ""
$TempData = ""
$TempSearchResultName = ""
EndFunc ;==>CheckIncoming
[/autoit] [autoit][/autoit] [autoit]Func CheckConnection()
For $iIndex = 0 To UBound($aUsers, 1) - 1
If Ping($aUsers[$iIndex][1], 250) = 0 And StringLen($aUsers[$iIndex][1]) > 0 Then
TCPCloseSocket($aUsers[$iIndex][0])
$aUsers[$iIndex][0] = ""
$aUsers[$iIndex][1] = ""
$aUsers[$iIndex][2] = ""
For $i = 1 To UBound($aUsers, 1) - 1
If $aUsers[$i][0] = "" Then ContinueLoop
TCPSend($aUsers[$i][0], "Server|" & $sIP & "|Die Verbindung zur Maschine von '" & $aUsers[$iIndex][1] & "' ging verloren!")
Next
EndIf
Next
EndFunc ;==>CheckConnection
Func AFKKick()
EndFunc ;==>AFKKick
Func SocketToIP($SHOCKET)
Local $sockaddr, $aRet
$sockaddr = DllStructCreate("short;ushort;uint;char[8]")
$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
$sockaddr = 0
Return $aRet
EndFunc ;==>SocketToIP
Func LogFile($sData, $sType)
Switch $sType
Case "Chat"
_FileWriteLog(@ScriptDir & "\" & $sChatLogName, $sData)
Case "Programm"
_FileWriteLog(@ScriptDir & "\" & $sGeneralLogName, $sData)
EndSwitch
EndFunc ;==>LogFile
Func OpenChatLog()
TrayItemSetState(@TRAY_ID, 68)
If Not FileExists(@SystemDir & "\notepad.exe") Then
MsgBox(48, "Error", "notepad.exe konnte nicht gefunden werden!")
Return -1
EndIf
Run("notepad.exe " & $sChatLogName)
EndFunc ;==>OpenChatLog
Func ShowClients()
_GUICtrlListView_DeleteAllItems($hListView1)
For $i = 0 To UBound($aUsers, 1) - 1
If StringLen($aUsers[$i][2]) > 0 And StringLen($aUsers[$i][1]) > 0 Then
$iTempIndex = _GUICtrlListView_AddItem($hListView1, $aUsers[$i][2], 0)
_GUICtrlListView_AddSubItem($hListView1, $iTempIndex, $aUsers[$i][1], 1, 1)
EndIf
$iMaxIndexClientList = _GUICtrlListView_GetItemCount($hListView1)
Next
EndFunc ;==>ShowClients
Func KickSelected()
For $iIndex = 0 To $iMaxIndexClientList - 1
$TempStatus = _GUICtrlListView_GetItem($hListView1, $iIndex)
If BitAND($TempStatus[0],
= 8 Then
$TempSearchResult = _ArraySearch($aUsers, _GUICtrlListView_GetItemText($hListView1, $iIndex))
If $TempSearchResult <> -1 Then
TCPSend($aUsers[$TempSearchResult][0], "//Kick(Admin)")
TCPCloseSocket($aUsers[$TempSearchResult][0])
$aUsers[$TempSearchResult][0] = ""
$aUsers[$TempSearchResult][1] = ""
$aUsers[$TempSearchResult][3] = ""
For $i = 1 To UBound($aUsers, 1) - 1
If $aUsers[$i][0] = "" Then ContinueLoop
TCPSend($aUsers[$i][0], "//UserKick(" & $aUsers[$TempSearchResult][2] & ")")
Next
_GUICtrlListView_DeleteItem($hListView2, _GUICtrlListView_FindText($hListView2, $aUsers[$TempSearchResult][2]))
$aUsers[$TempSearchResult][2] = ""
Else
MsgBox(48, "Error", "Der User konnte nicht gefunden werden!")
Return -1
EndIf
EndIf
Next
_GUICtrlListView_DeleteAllItems($hListView1)
For $i = 0 To UBound($aUsers, 1) - 1
If StringLen($aUsers[$i][2]) > 0 And StringLen($aUsers[$i][1]) > 0 Then
$iTempIndex = _GUICtrlListView_AddItem($hListView1, $aUsers[$i][2], 0)
_GUICtrlListView_AddSubItem($hListView1, $iTempIndex, $aUsers[$i][1], 1, 1)
EndIf
Next
$TempStatus = ""
$iTempIndex = ""
$TempSearchResult = ""
EndFunc ;==>KickSelected
[/autoit] [autoit][/autoit] [autoit]Func BanSelected()
For $iIndex = 0 To $iMaxIndexClientList - 1
$TempStatus = _GUICtrlListView_GetItem($hListView1, $iIndex)
If BitAND($TempStatus[0],
= 8 Then
$TempSearchResult = _ArraySearch($aUsers, _GUICtrlListView_GetItemText($hListView1, $iIndex))
If $TempSearchResult <> -1 Then
Switch MsgBox(48 + 3, "Perm/Temp - Ban", "Soll der User permanent gebannt werden?" & @LF _
"'JA' = Perm, 'NEIN' = Temp, 'Abbrechen' = Abbruch der Funktion")
Case 6
_FileWriteToLine($sBanListPath, _FileCountLines($sBanListPath) + 1, $aUsers[$TempSearchResult][3])
_ArrayAdd($aBanList, $aUsers[$TempSearchResult][3])
Case 7
_ArrayAdd($aBanList, $aUsers[$TempSearchResult][3])
Case Else
Return -1
EndSwitch
TCPSend($aUsers[$TempSearchResult][0], "//Kick(AdminBan)")
TCPCloseSocket($aUsers[$TempSearchResult][0])
$aUsers[$TempSearchResult][0] = ""
$aUsers[$TempSearchResult][1] = ""
$aUsers[$TempSearchResult][3] = ""
For $i = 1 To UBound($aUsers, 1) - 1
If $aUsers[$i][0] = "" Then ContinueLoop
TCPSend($aUsers[$i][0], "//UserBan(" & $aUsers[$TempSearchResult][2] & ")")
Next
_GUICtrlListView_DeleteItem($hListView2, _GUICtrlListView_FindText($hListView2, $aUsers[$TempSearchResult][2]))
$aUsers[$TempSearchResult][2] = ""
Else
MsgBox(48, "Error", "Der User konnte nicht gefunden werden!")
Return -1
EndIf
EndIf
Next
_GUICtrlListView_DeleteAllItems($hListView1)
For $i = 0 To UBound($aUsers, 1) - 1
If StringLen($aUsers[$i][2]) > 0 And StringLen($aUsers[$i][1]) > 0 Then
$iTempIndex = _GUICtrlListView_AddItem($hListView1, $aUsers[$i][2], 0)
_GUICtrlListView_AddSubItem($hListView1, $iTempIndex, $aUsers[$i][1], 1, 1)
EndIf
Next
$TempStatus = ""
$iTempIndex = ""
$TempSearchResult = ""
EndFunc ;==>BanSelected
[/autoit] [autoit][/autoit] [autoit]Func _AdminChat()
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetState($Input1, $GUI_FOCUS)
GUISetState(@SW_SHOW, $hMainGUI)
TrayItemSetState(@TRAY_ID, 68)
EndFunc ;==>_AdminChat
[/autoit] [autoit][/autoit] [autoit]Func _Send()
[/autoit] [autoit][/autoit] [autoit]$sDataAdmin = GUICtrlRead($Input1)
[/autoit] [autoit][/autoit] [autoit]Select
Case StringLower($sDataAdmin) = "restart"
LogFile("Programm wird von Admin per Chatbefehle neugestartet!", "Programm")
LogFile("", "Programm")
$bRestart = True
Exit
Case StringLower($sDataAdmin) = "shutdown"
LogFile("Programm wird von Admin per Chatbefehle beendet!", "Programm")
LogFile("", "Programm")
Exit
Case StringLower(StringLeft($sDataAdmin, 5)) = "kick "
$sName = StringRight($sDataAdmin, StringLen($sDataAdmin) - 5)
$TempSearchResult = _ArraySearch($aUsers, $sName)
If $TempSearchResult <> -1 Then
TCPSend($aUsers[$TempSearchResult][0], "//Kick(Admin)")
TCPCloseSocket($aUsers[$TempSearchResult][0])
$aUsers[$TempSearchResult][0] = ""
$aUsers[$TempSearchResult][1] = ""
For $i = 1 To UBound($aUsers, 1) - 1
If $aUsers[$i][0] = "" Then ContinueLoop
TCPSend($aUsers[$i][0], "//UserKick(" & $aUsers[$TempSearchResult][2] & ")")
Next
_GUICtrlListView_DeleteItem($hListView2, _GUICtrlListView_FindText($hListView2, $aUsers[$TempSearchResult][2]))
$aUsers[$TempSearchResult][2] = ""
Else
MsgBox(48, "Error", "Der User konnte nicht gefunden werden!")
Return -1
EndIf
Case StringLower(StringLeft($sDataAdmin, 4)) = "ban "
$sName = StringRight($sDataAdmin, StringLen($sDataAdmin) - 4)
$TempSearchResult = _ArraySearch($aUsers, $sName)
If $TempSearchResult <> -1 Then
Switch MsgBox(48 + 3, "Perm/Temp - Ban", "Soll der User permanent gebannt werden?" & @LF _
"'JA' = Perm, 'NEIN' = Temp, 'Abbrechen' = Abbruch der Funktion")
Case 6
_FileWriteToLine($sBanListPath, _FileCountLines($sBanListPath) + 1, $aUsers[$TempSearchResult][3])
_ArrayAdd($aBanList, $aUsers[$TempSearchResult][3])
Case 7
_ArrayAdd($aBanList, $aUsers[$TempSearchResult][3])
Case Else
Return -1
EndSwitch
TCPSend($aUsers[$TempSearchResult][0], "//Kick(AdminBan)")
TCPCloseSocket($aUsers[$TempSearchResult][0])
$aUsers[$TempSearchResult][0] = ""
$aUsers[$TempSearchResult][1] = ""
$aUsers[$TempSearchResult][3] = ""
For $i = 1 To UBound($aUsers, 1) - 1
If $aUsers[$i][0] = "" Then ContinueLoop
TCPSend($aUsers[$i][0], "//UserBan(" & $aUsers[$TempSearchResult][2] & ")")
Next
_GUICtrlListView_DeleteItem($hListView2, _GUICtrlListView_FindText($hListView2, $aUsers[$TempSearchResult][2]))
$aUsers[$TempSearchResult][2] = ""
Else
MsgBox(48, "Error", "Der User konnte nicht gefunden werden!")
Return -1
EndIf
Case StringLen($sDataAdmin) > 0
For $i = 1 To UBound($aUsers, 1) - 1
If $aUsers[$i][0] = "" Then ContinueLoop
TCPSend($aUsers[$i][0], "Admin|" & $sIP & "|" & $sDataAdmin)
Next
WriteMemo($sDataAdmin, "Admin")
LogFile("Admin => ALL: " & $sDataAdmin, "Chat")
EndSelect
GUICtrlSetData($Input1, "")
GUICtrlSetState($Input1, $GUI_FOCUS)
EndFunc ;==>_Send
[/autoit] [autoit][/autoit] [autoit]Func ToggleClientGUI()
Switch _WinAPI_IsWindowVisible($hClientverwaltung)
Case True
GUISetState(@SW_HIDE, $hClientverwaltung)
TrayItemSetState(@TRAY_ID, 68)
ShowClients()
Case False
GUISetState(@SW_SHOW, $hClientverwaltung)
TrayItemSetState(@TRAY_ID, 65)
ShowClients()
EndSwitch
EndFunc ;==>ToggleClientGUI
Func HideChatGUI()
GUISetState(@SW_HIDE, $hMainGUI)
EndFunc ;==>HideChatGUI
Func OnAutoItStart()
Global Const $sChatLogName = "ChatLog_" & @MDAY & "-" & @MON & "-" & @YEAR & ".log"
Global Const $sGeneralLogName = "GeneralLog_" & @MDAY & "-" & @MON & "-" & @YEAR & ".log"
LogFile("", "Programm")
LogFile(" --- SERVER STARTUP --- ", "Programm")
LogFile("", "Programm")
LogFile("", "Chat")
LogFile(" --- SERVER STARTUP --- ", "Chat")
LogFile("", "Chat")
EndFunc ;==>OnAutoItStart
Func OnAutoItExit()
For $i = 1 To UBound($aUsers, 1) - 1
If $aUsers[$i][0] = "" Then ContinueLoop
TCPSend($aUsers[$i][0], "//Quit(Server-Shutdown)")
LogFile("Server => " & $aUsers[$i][2] & "(" & $aUsers[$i][1] & "): //Quit(Server-Shutdown)", "Chat")
TCPCloseSocket($aUsers[$i][0])
Next
TCPShutdown()
[/autoit] [autoit][/autoit] [autoit]LogFile("Laufzeit: " & $Time, "Programm")
LogFile("", "Chat")
LogFile(" --- SERVER SHUTDOWN --- ", "Chat")
LogFile("", "Chat")
LogFile("", "Programm")
LogFile(" --- SERVER SHUTDOWN --- ", "Programm")
LogFile("", "Programm")
If $bRestart = True Then ShellExecute(@ScriptFullPath)
EndFunc ;==>OnAutoItExit
Func _Exit()
If TrayItemGetText(@TRAY_ID) = "Beenden" Then Exit
If TrayItemGetText(@TRAY_ID) = "Server neu starten" Then
LogFile("Programm wird von Admin per Traymenü neu gestartet!", "Programm")
LogFile("", "Programm")
$bRestart = True
Exit
ElseIf GUICtrlRead(@GUI_CtrlId) = "Server neu starten" Then
LogFile("Programm wird von Admin über das Verwaltungsmenü neu gestartet!", "Programm")
LogFile("", "Programm")
$bRestart = True
Exit
EndIf
Exit
EndFunc ;==>_Exit
Func CopyIPClipboard()
TrayItemSetState(@TRAY_ID, 68)
If StringLen(ClipGet()) > 0 Then
If MsgBox(48 + 4, "Error", "Die Zwischenablage ist NICHT leer!" & @LF _
& "Enthält folgendes: " & @LF & @LF & _
& ClipGet() & @LF & @LF & _
"Überschreiben?") = 6 Then
If ClipPut($sIP) = 1 Then
LogFile("Server-IP (" & $sIP & ") erfolgreich in die Zwischenablage kopiert!", "Programm")
TrayTipExt("Kopieren erfolgreich!")
EndIf
EndIf
EndIf
EndFunc ;==>CopyIPClipboard
Func TrayTipExt($sText)
TrayTip($sTitle, $sText, 3)
$tTrayTipTimer = _Timer_Init()
EndFunc ;==>TrayTipExt
Func RefreshStuff()
If _Timer_Diff($tTrayTipTimer) > 3000 Then TrayTip($sTitle, "", 1)
$iLastMins = $iMins
$iLastHour = $iHours
_TicksToTime(_Timer_Diff($tGes), $iHours, $iMins, $iSecs)
[/autoit] [autoit][/autoit] [autoit]If $iLastMins <> $iMins Or $iLastHour <> $iHours Then
$Time = StringFormat("i:i", $iHours, $iMins)
TraySetToolTip("Server IP: " & $sIP & "" & @LF _
& "Computername: " & $sPCNetworkName & "" & @LF _
& "Server läuft: " & $Time)
EndIf
EndFunc ;==>RefreshStuff
Func WriteMemo($sData, $sNameEdit)
GUICtrlSetData($Edit1, GUICtrlRead($Edit1) & @HOUR & ":" & @MIN & " ~ " & $sNameEdit & " > " & $sData & @CRLF)
EndFunc ;==>WriteMemo
Client Quellcode:
#include <GuiListView.au3>
#include <Misc.au3>
#include <Timers.au3>
#include <Array.au3>
#include <GuiListBox.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
#include <GuiComboBox.au3>
If TCPStartup() <> 1 Then
MsgBox(48, "Error", "TCP-Service konnte nicht gestartet werden!" & @LF & _
"Programm wird beendet!")
Exit
EndIf
Opt("TrayOnEventMode", 1)
Opt("GuiOnEventMode", 1)
Opt("TrayAutoPause", 0)
Opt("TrayMenuMode", 1)
Opt("TrayIconDebug", 0)
Opt("TCPTimeout", 500)
TraySetToolTip("Eigene IP-Adresse: " & @IPAddress1)
[/autoit] [autoit][/autoit] [autoit]Global Const $sTitleLogin = "Chat-Login"
Global Const $sIniPath = @ScriptDir & "\Client.ini"
Global $sProgID
If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Multichat", "Key") = "" Then
_GenerateKey()
Else
$sProgID = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Multichat", "Key")
EndIf
Global $sTitleChat = "Multichat"
Global $tTrayTipTimer
$sTemp1 = IniRead($sIniPath, "LastSettings", "StyleEdit", "")
$sTemp2 = IniRead($sIniPath, "LastSettings", "StyleAll", "")
If $sTemp1 <> "" Then $NewStyleEditOnly = StringSplit($sTemp1, "|", 2)
If $sTemp2 <> "" Then $NewStyleAll = StringSplit($sTemp2, "|", 2)
Global $NewStyleEditOnly
Global $NewStyleAll
Global $sLastIP = IniRead($sIniPath, "LastSettings", "LastIP", "")
Global $sLastName = IniRead($sIniPath, "LastSettings", "LastName", "")
#Region ### LoginGUI
$hLoginGUI = GUICreate($sTitleLogin, 225, 165, 265, 155)
$Group1 = GUICtrlCreateGroup("Server IP", 8, 0, 185, 49, $BS_CENTER)
$Input1 = GUICtrlCreateInput($sLastIP, 16, 16, 169, 26, BitOR($ES_CENTER, $ES_AUTOHSCROLL))
GUICtrlSetFont(-1, 10)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Nickname", 8, 48, 185, 49, $BS_CENTER)
$Input2 = GUICtrlCreateInput($sLastName, 16, 64, 169, 26, BitOR($ES_CENTER, $ES_AUTOHSCROLL))
GUICtrlSetFont(-1, 10)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Starte Verbindungsversuch", 10, 104, 179, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "Connect")
GUICtrlSetState(-1, $GUI_DEFBUTTON)
GUICtrlSetFont(-1, 10)
$Progress1 = GUICtrlCreateProgress(200, 8, 17, 153, $PBS_VERTICAL)
$Button11 = GUICtrlCreateButton("Abbrechen", 10, 136, 179, 25, $WS_GROUP)
GUICtrlSetFont(-1, 10)
;~ GUISetState(@SW_HIDE, $hLoginGUI)
#EndRegion ### END Koda GUI section ###
#Region ### ChatGUI
$hMainGUI = GUICreate($sTitleChat, 749, 450, 185, 137, BitOR($WS_SIZEBOX, $WS_SYSMENU))
$Edit1 = GUICtrlCreateEdit("", 0, 0, 617, 393, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_READONLY, $ES_WANTRETURN, $WS_HSCROLL, $WS_VSCROLL))
GUICtrlSetResizing(-1, 1)
GUICtrlSetData(-1, "")
GUICtrlSetFont(-1, 10)
GUICtrlSetCursor(-1, 2)
$Input3 = GUICtrlCreateInput("", 0, 392, 521, 29)
GUICtrlSetResizing(-1, 1)
GUICtrlSetFont(-1, 10)
GUICtrlSetCursor(-1, 5)
$Button2 = GUICtrlCreateButton("Senden", 520, 392, 97, 29, BitOR($BS_DEFPUSHBUTTON, $BS_CENTER, $BS_VCENTER, $WS_GROUP))
GUICtrlSetResizing(-1, 1)
GUICtrlSetOnEvent(-1, "_Send")
$ListView1 = GUICtrlCreateListView("", 616, 0, 129, 292)
GUICtrlSetResizing(-1, 1)
GUICtrlSetFont(-1, 10)
$Button6 = GUICtrlCreateButton("Style ändern", 616, 296, 131, 29, $WS_GROUP)
GUICtrlSetResizing(-1, 1)
GUICtrlSetOnEvent(-1, "HideStyleGUI")
$Button3 = GUICtrlCreateButton("Chat verstecken", 616, 328, 131, 29, $WS_GROUP)
GUICtrlSetResizing(-1, 1)
GUICtrlSetOnEvent(-1, "ShowHideMultichat")
$Button4 = GUICtrlCreateButton("Beenden", 616, 360, 131, 29, $WS_GROUP)
GUICtrlSetResizing(-1, 1)
GUICtrlSetOnEvent(-1, "_Exit")
$Button5 = GUICtrlCreateButton("Neu starten", 616, 392, 131, 29, $WS_GROUP)
GUICtrlSetResizing(-1, 1)
GUICtrlSetOnEvent(-1, "_Exit")
;~ GUISetState(@SW_HIDE, $hMainGUI)
#EndRegion ### END Koda GUI section ###
#Region ### ChangeStyleGUI
$hChangeStyle = GUICreate("Style ändern", 212, 229, 332, 131)
$Group2 = GUICtrlCreateGroup("Schriftgröße / Schriftfarbe ", 8, 8, 201, 129)
$Group3 = GUICtrlCreateGroup("Nur Edit-Felder ", 16, 24, 185, 49)
$Button7 = GUICtrlCreateButton("Auswählen", 24, 40, 171, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "ChooseFont")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("Alles ", 16, 80, 185, 49)
$Button8 = GUICtrlCreateButton("Auswählen", 24, 96, 171, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "ChooseFont")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button9 = GUICtrlCreateButton("Speichern", 8, 144, 99, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "SaveStyle")
$Button10 = GUICtrlCreateButton("Abbrechen", 112, 144, 91, 25, $WS_GROUP)
GUICtrlSetOnEvent(-1, "HideStyleGUI")
$Group1 = GUICtrlCreateGroup("Transparenz", 8, 176, 201, 49)
$Slider1 = GUICtrlCreateSlider(16, 192, 185, 25)
GUICtrlSetOnEvent(-1, "SetTransparenz")
GUICtrlSetLimit(-1, 255, 0)
GUICtrlCreateGroup("", -99, -99, 1, 1)
;~ GUISetState(@SW_HIDE, $hChangeStyle)
#EndRegion ### END Koda GUI section ###
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hLoginGUI)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hMainGUI)
GUISetOnEvent($GUI_EVENT_CLOSE, "HideStyleGUI", $hChangeStyle)
Global $hListView1 = GUICtrlGetHandle($ListView1)
Global $ServerSocket
Global $ServerIP
Global $Nickname
Global $bRestart = False
_GUICtrlListView_AddColumn($hListView1, "Andere Clients", 125)
[/autoit] [autoit][/autoit] [autoit]SaveStyle()
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW, $hLoginGUI)
WinActivate($sTitleLogin)
While 1
Sleep(10)
WEnd
Func Connect()
[/autoit] [autoit][/autoit] [autoit]Local $intTryConnect = 0
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetState($Input3, $GUI_FOCUS)
GUICtrlSetState($Button2, $GUI_DEFBUTTON)
GUICtrlSetData($Progress1, 0)
[/autoit] [autoit][/autoit] [autoit]$ServerIP = GUICtrlRead($Input1)
$Nickname = GUICtrlRead($Input2)
If Not StringRegExp($ServerIP, "^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\." & _
"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\." & _
"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\." & _
"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$") Then
MsgBox(48, "Error", "IP Adresse hat nicht das richtige Format! (xxx.xxx.xxx.xxx)" & @LF & _
"Fehlercode: " & StringRegExp($ServerIP, "^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"))
GUICtrlSetData($Progress1, 0)
Return -1
EndIf
GUICtrlSetData($Progress1, 10)
[/autoit] [autoit][/autoit] [autoit]If StringRegExp($Nickname, "\A[\w-\s]+\z", 0) = 0 Then
MsgBox(48, "Error", "Nickname enthält ungültige Zeichen!" & @LF & _
"Es sind nur Buchstaben, Zahlen und Unterstrich sowie Bindestrich erlaubt!")
Return -1
EndIf
GUICtrlSetData($Progress1, 20)
[/autoit] [autoit][/autoit] [autoit]If Ping($ServerIP, 500) = 0 Then
MsgBox(48, "Error", "Der Server konnte nicht angepingt werden!" & @LF & _
"Fehlercode: [" & @error & "]" & @LF & _
"Bitte überprüfen Sie die IP-Adresse!")
GUICtrlSetData($Progress1, 0)
Return -1
EndIf
Do
$ServerSocket = TCPConnect($ServerIP, 2150)
GUICtrlSetData($Progress1, GUICtrlRead($Progress1) + 10)
$intTryConnect += 1
Sleep(500)
Until $intTryConnect > 5 Or $ServerSocket <> -1
If $intTryConnect > 5 Then
GUICtrlSetData($Progress1, 0)
MsgBox(48, "Error", "Server nach 5 Verbindungsversuchen nicht erreichbar!")
Return -1
EndIf
TrayTip($sTitleChat, "Warte bis der Server die Verbindung zulässt...", 20)
$TimerWaitAccept = _Timer_Init()
Opt("GuiOnEventMode", 0)
[/autoit] [autoit][/autoit] [autoit]If _VersionCompare(@AutoItVersion, "3.3.1.0") = -1 Then
AdlibEnable("CheckIncoming")
AdlibEnable("CheckConnection")
Else
AdlibRegister("CheckIncoming")
AdlibRegister("CheckConnection")
EndIf
Do
Sleep(100)
$TempRecv = TCPRecv($ServerSocket, 1024)
If @error Then
TrayTipExt("Verbindungsversuch wurde abgelehnt..")
GUICtrlSetData($Progress1, 0)
Return -1
EndIf
If _Timer_Diff($TimerWaitAccept) > 15000 Then
MsgBox(48, "Error", "Verbindungstimeout (15 Sekunden) wurde erreicht!" & @LF & _
"Verbindungsversuch wurde abgebrochen!")
GUICtrlSetData($Progress1, 0)
Return -2
EndIf
If GUIGetMsg() = $Button11 Then
GUICtrlSetData(0, $Progress1)
Opt("GuiOnEventMode", 1)
MsgBox(48, "Abbruch", "Verbindungsversuch wurde abgebrochen!")
Return -3
EndIf
Until $TempRecv = "//Accept"
[/autoit] [autoit][/autoit] [autoit]Opt("GuiOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]TrayTip($sTitleChat, "", 1)
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetData($Progress1, 100)
[/autoit] [autoit][/autoit] [autoit]TrayCreateItem("Zeige Multichat")
TrayItemSetOnEvent(-1, "ShowHideMultichat")
TrayCreateItem("Beenden")
TrayItemSetOnEvent(-1, "_Exit")
SendSpecial($ServerSocket, "Key", $sProgID)
Sleep(500)
SendSpecial($ServerSocket, "Name", $Nickname)
GUISetState(@SW_HIDE, $hLoginGUI)
GUISetState(@SW_SHOW, $hMainGUI)
WinSetTitle($sTitleChat, "", $sTitleChat & " - " & $Nickname)
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>Connect
[/autoit] [autoit][/autoit] [autoit]Func CheckIncoming()
$TestTimer = _Timer_Init()
$TempData = TCPRecv($ServerSocket, 8192)
If StringLen($TempData) > 0 Then
$aRecv = StringSplit($TempData, "|", 2)
Select
Case StringLeft($TempData, 6) = "//Quit"
TCPCloseSocket($ServerSocket)
WriteMemo("Verbindung verloren!", "Server")
If MsgBox(48 + 4, "Error", "Die Verbindung zum Server ging verloren!" & @LF & _
"Der Socket wurde geschlossen! - Programm neu starten?") = 6 Then
$bRestart = True
Exit
Else
Exit
EndIf
Case StringLeft($TempData, 6) = "//Kick"
$TempData = StringTrimLeft($TempData, 7)
$TempData = StringTrimRight($TempData, 1)
Switch $TempData
Case "DoubleName"
MsgBox(48, "Name bereits verwendet!", "Der Name wird auf dem Server bereits verwendet!" & @LF & _
"Bitte anderen Namen verwenden!")
$bRestart = True
Exit
Case "Admin"
GUISetState(@SW_HIDE, $hMainGUI)
If MsgBox(48 + 4, "Verbindung verloren!", "Sie wurden vom Server gekickt!" & @LF & _
"Client neu starten?") = 6 Then $bRestart = True
Exit
Case "Banned"
GUISetState(@SW_HIDE, $hMainGUI)
MsgBox(48, "Verbindung verloren!", "Sie sind auf diesem Server gebannt!")
Return -1
Case "AdminBan"
GUISetState(@SW_HIDE, $hMainGUI)
MsgBox(48, "Verbindung verloren!", "Sie wurden soeben auf diesem Server gebannt!")
Return -2
EndSwitch
[/autoit] [autoit][/autoit] [autoit]Case StringLeft($TempData, 7) = "//Users"
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $TempData = ' & $TempData & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$TempData = StringTrimLeft($TempData, ![]()
$TempData = StringTrimRight($TempData, 1)
$aTempUsers = StringSplit($TempData, ";")
WriteMemo("'" & $aTempUsers[1] & "' ist dem Chat beigetreten!", "Server")
_GUICtrlListView_DeleteAllItems($hListView1)
For $i = 1 To $aTempUsers[0]
If $aTempUsers[$i] = "" Then ContinueLoop
_GUICtrlListView_AddItem($hListView1, $aTempUsers[$i])
Next
Case StringLeft($TempData, 10) = "//UserQuit"
$TempData = StringTrimLeft($TempData, 11)
$TempData = StringTrimRight($TempData, 1)
WriteMemo("'" & $TempData & "' hat den Chat verlassen!", "Server")
_GUICtrlListView_DeleteItem($hListView1, _GUICtrlListView_FindInText($hListView1, $TempData))
Case StringLeft($TempData, 10) = "//UserKick"
$TempData = StringTrimLeft($TempData, 11)
$TempData = StringTrimRight($TempData, 1)
WriteMemo("'" & $TempData & "' wurde vom Server gekickt!", "Server")
_GUICtrlListView_DeleteItem($hListView1, _GUICtrlListView_FindInText($hListView1, $TempData))
Case StringLeft($TempData, 10) = "//UserKick"
$TempData = StringTrimLeft($TempData, 11)
$TempData = StringTrimRight($TempData, 1)
WriteMemo("'" & $TempData & "' wurde vom Server gebannt!", "Server")
_GUICtrlListView_DeleteItem($hListView1, _GUICtrlListView_FindInText($hListView1, $TempData))
Case IsArray($aRecv) And @error <> 1
WriteMemo($aRecv[2], $aRecv[0])
EndSelect
EndIf
ConsoleWrite("Durchlaufdauer von 'Check Incoming' beträgt: " & @LF & _Timer_Diff($TestTimer) & @LF & @LF)
EndFunc ;==>CheckIncoming
Func CheckConnection()
If Ping($ServerIP, 500) = 0 And $intTryConnect > 0 Then
WriteMemo("Verbindung verloren!", "Server")
TCPCloseSocket($ServerSocket)
If MsgBox(262144 + 4, "Verbindungstimeout", "Die Verbindung zum Server ging verloren!" & @LF & _
"Der Socket wurde geschlossen! - Programm neu starten?") = 6 Then
$bRestart = True
Exit
Else
Exit
EndIf
EndIf
EndFunc ;==>CheckConnection
Func _Send()
Local $intTrySend = 0
If StringLen(GUICtrlRead($Input3)) = 0 Then Return -1
[/autoit] [autoit][/autoit] [autoit]If StringLen(GUICtrlRead($Input3)) > 200 Then
MsgBox(48, "Error", "Die maximale Zeichenanzahl beträgt 200!" & @LF _
& "Sie wollten '" StringLen(GUICtrlRead($Input3)) & "' Zeichen senden." & @LF _
& "Das sind '" & StringLen(GUICtrlRead($Input3)) - 200 & "' Zeichen zuviel!")
Return -1
EndIf
Do
$TCPData = TCPSend($ServerSocket, $Nickname & "|" & @IPAddress1 & "|" & GUICtrlRead($Input3))
$intTrySend += 1
Until $intTrySend > 5 Or $TCPData > 0
If $intTrySend > 5 Then
WriteMemo("Konnte Daten nicht an den Server schicken!", "Error")
Else
GUICtrlSetData($Input3, "")
EndIf
EndFunc ;==>_Send
[/autoit] [autoit][/autoit] [autoit]Func SendSpecial($Socket, $sType, $sData)
TCPSend($Socket, "//" & $sType & "(" & $sData & ")")
EndFunc ;==>SendSpecial
Func WriteMemo($sData, $sNameEdit)
GUICtrlSetData($Edit1, GUICtrlRead($Edit1) & @HOUR & ":" & @MIN & " ~ " & $sNameEdit & " > " & $sData & @CRLF)
EndFunc ;==>WriteMemo
Func ChooseFont()
Switch @GUI_CtrlId
Case $Button7
Switch IsArray($NewStyleEditOnly)
Case 1
$NewStyleEditOnly = _ChooseFont($NewStyleEditOnly[2], $NewStyleEditOnly[3], $NewStyleEditOnly[5], $NewStyleEditOnly[4], BitAND($NewStyleEditOnly[1], 2), BitAND($NewStyleEditOnly[1], 4), BitAND($NewStyleEditOnly[1], 8))
Case 0
$NewStyleEditOnly = _ChooseFont()
EndSwitch
Case $Button8
Switch IsArray($NewStyleAll)
Case 1
$NewStyleAll = _ChooseFont($NewStyleAll[2], $NewStyleAll[3], $NewStyleAll[5], $NewStyleAll[4], BitAND($NewStyleAll[1], 2), BitAND($NewStyleAll[1], 4), BitAND($NewStyleAll[1], 8))
Case 0
$NewStyleAll = _ChooseFont()
EndSwitch
EndSwitch
EndFunc ;==>ChooseFont
Func SaveStyle()
If IsArray($NewStyleAll) Then
GUICtrlSetFont($Edit1, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
GUICtrlSetFont($Input1, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
GUICtrlSetFont($Input2, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
GUICtrlSetFont($Input3, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
GUICtrlSetFont($Button1, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
GUICtrlSetFont($Button2, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
GUICtrlSetFont($Button3, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
GUICtrlSetFont($Button4, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
GUICtrlSetFont($Button5, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
GUICtrlSetFont($Button6, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
GUICtrlSetFont($Button7, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
GUICtrlSetFont($Button8, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
GUICtrlSetFont($Button9, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
GUICtrlSetFont($Button10, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
GUICtrlSetFont($Button11, $NewStyleAll[3], $NewStyleAll[4], $NewStyleAll[1], $NewStyleAll[2])
GUICtrlSetColor($Edit1, $NewStyleAll[7])
GUICtrlSetColor($Input1, $NewStyleAll[7])
GUICtrlSetColor($Input2, $NewStyleAll[7])
GUICtrlSetColor($Input3, $NewStyleAll[7])
GUICtrlSetColor($Button1, $NewStyleAll[7])
GUICtrlSetColor($Button2, $NewStyleAll[7])
GUICtrlSetColor($Button3, $NewStyleAll[7])
GUICtrlSetColor($Button4, $NewStyleAll[7])
GUICtrlSetColor($Button5, $NewStyleAll[7])
GUICtrlSetColor($Button6, $NewStyleAll[7])
GUICtrlSetColor($Button7, $NewStyleAll[7])
GUICtrlSetColor($Button8, $NewStyleAll[7])
GUICtrlSetColor($Button9, $NewStyleAll[7])
GUICtrlSetColor($Button10, $NewStyleAll[7])
GUICtrlSetColor($Button11, $NewStyleAll[7])
EndIf
If IsArray($NewStyleEditOnly) Then
GUICtrlSetFont($Edit1, $NewStyleEditOnly[3], $NewStyleEditOnly[4], $NewStyleEditOnly[1], $NewStyleEditOnly[2])
GUICtrlSetFont($Input1, $NewStyleEditOnly[3], $NewStyleEditOnly[4], $NewStyleEditOnly[1], $NewStyleEditOnly[2])
GUICtrlSetFont($Input2, $NewStyleEditOnly[3], $NewStyleEditOnly[4], $NewStyleEditOnly[1], $NewStyleEditOnly[2])
GUICtrlSetFont($Input3, $NewStyleEditOnly[3], $NewStyleEditOnly[4], $NewStyleEditOnly[1], $NewStyleEditOnly[2])
GUICtrlSetColor($Edit1, $NewStyleEditOnly[7])
GUICtrlSetColor($Input1, $NewStyleEditOnly[7])
GUICtrlSetColor($Input2, $NewStyleEditOnly[7])
GUICtrlSetColor($Input3, $NewStyleEditOnly[7])
EndIf
GUISetState(@SW_HIDE, $hChangeStyle)
EndFunc ;==>SaveStyle
Func HideStyleGUI()
Switch _WinAPI_IsWindowVisible($hChangeStyle)
Case True
GUISetState(@SW_HIDE, $hChangeStyle)
Case False
GUISetState(@SW_SHOW, $hChangeStyle)
EndSwitch
EndFunc ;==>HideStyleGUI
Func ShowHideMultichat()
Switch _WinAPI_IsWindowVisible($hMainGUI)
Case True
GUISetState(@SW_HIDE, $hMainGUI)
Case False
GUISetState(@SW_SHOW, $hMainGUI)
EndSwitch
EndFunc ;==>ShowHideMultichat
Func TrayTipExt($sText)
TrayTip($sTitleChat, $sText, 3)
$tTrayTipTimer = _Timer_Init()
If _VersionCompare(@AutoItVersion, "3.3.1.0") = -1 Then
AdlibEnable("TrayTipTimer", 3100)
Else
AdlibRegister("TrayTipTimer", 3100)
EndIf
EndFunc ;==>TrayTipExt
Func TrayTipTimer()
If _Timer_Diff($tTrayTipTimer) > 3000 Then
TrayTip($sTitleChat, "", 1)
If _VersionCompare(@AutoItVersion, "3.3.1.0") = -1 Then
AdlibDisable("TrayTipTimer")
Else
AdlibUnRegister("TrayTipTimer")
EndIf
EndIf
EndFunc ;==>TrayTipTimer
Func _Exit()
Select
Case @GUI_CtrlId = $Button5
$bRestart = True
EndSelect
Exit
EndFunc ;==>_Exit
Func OnAutoItExit()
IniWrite($sIniPath, "LastSettings", "LastIP", $ServerIP)
IniWrite($sIniPath, "LastSettings", "LastName", $Nickname)
IniWrite($sIniPath, "LastSettings", "StyleEdit", _ArrayToString($NewStyleEditOnly, "|"))
IniWrite($sIniPath, "LastSettings", "StyleAll", _ArrayToString($NewStyleAll, "|"))
SendSpecial($ServerSocket, "Quit", $Nickname)
TCPCloseSocket($ServerSocket)
TCPShutdown()
If $bRestart = True Then ShellExecute(@ScriptFullPath)
EndFunc ;==>OnAutoItExit
Func SetTransparenz()
WinSetTrans($sTitleChat, "", GUICtrlRead(@GUI_CtrlId))
EndFunc ;==>SetTransparenz
Func _GenerateKey()
Local $TempKey = ""
For $iTemp = 1 To 20
$TempKey &= Random(0, 10, 1)
Next
$sProgID = $TempKey
[/autoit] [autoit][/autoit] [autoit]If RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Multichat", "Key", "REG_SZ", $sProgID) <> 1 Then
MsgBox(48, "Error", "Programmkey konnte nicht in die Registry geschrieben werden!" & @LF & "Programm wird beendet!")
Exit
EndIf
EndFunc ;==>_GenerateKey
Im Anhang sind dann nochmal die Quellcodes!
Sollte mit der derzeitigen Beta-Version von AutoIT problems funktionieren.
Wäre nett wenn den Chat jemand mal auf den XP, Vista etc testen könnte (bis jetzt nur auf Win 7 x86 getestet)
MfG oetzn
zu deiner sehr wichtigen Frage was die Mehzahl von Datum ist xD
"Datum" kommt aus dem lateinischen(dare 1 - geben) und bedeutet eigentlich wörtlich "das Gegebene", da es Neutrum ist wäre die richtige Pluralform: Data xD
wow, das erste Mal in meinem Leben wo ich Latein wirklich gebrauchen konnte -.- sehr deprimierend
habs mir noch nicht angesehen, aber das nächste mal könntest du es mit [autoit][autoit] posten(im 2. [autoit] gehötr vorne ein backslash rein
)
könntest du den Sourcecode auch noch posten pls?
oder in die .zip mit-reinpacken?