Moin liebe Community! Also ich bin ganz neu bei AutoIt und muss mich erst noch mal reinfuchsen, aber naja aber wird schon...
Ich hab jetzt erst mal einen Versuch mit einem Chat in Angriff genommen.
Also ich wollte mal einen Chat realisieren in Umgebungen wo Mailslot, NetBIOS (netsend) and Messenger Service gesperrt sind, aber man Netzwerkordner hat mit Schreib- und Lesezugriff.
Hab mal kurz das hier geschrieben, so als erste schnelle Idee:
Spoiler anzeigen
;include files
#include <GuiConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>
#Include <File.au3>
#Include <WinAPI.au3>
#include <Date.au3>
#NoTrayIcon
;path of DB
$chatfile = "\\NETZWERKORDNER\chat.txt"
Dim $line = ""
Dim $chatmessage = ""
Dim $displaymessage = ""
;username
[/autoit] [autoit][/autoit] [autoit]$username = InputBox("Shared Folder Chat","Please enter your username.")
If $username = "" Then
MsgBox(16,"Error","A username must be entered.")
Exit
EndIf
;GUIcreation
$chatwindow = GUICreate("Shared Folder Chat", 300, 700)
$GUIedit = GUICtrlCreateEdit("",5,25,290,640,BitOR($ES_READONLY,$ES_WANTRETURN,$WS_VSCROLL,$ES_AUTOVSCROLL))
$GUIinput = GUICtrlCreateInput("",5,670,290,25,BitOR($ES_NOHIDESEL,$ES_CENTER,$ES_AUTOHSCROLL))
GUISetState()
;###################################
; MAIN #############################
_onlinenotification()
_history()
$countlines = _FileCountLines($chatfile)
Do
_MySleep(30)
$msg = GUIGetMsg()
$countlinesneu = _FileCountLines($chatfile)
Select
Case $countlines <> $countlinesneu
receivemessage()
Case $msg = $GUIinput
Sendmessage()
EndSelect
;~ EndIf
Until $msg = $GUI_EVENT_CLOSE;To be able to close the Window!
_offlinenotification()
Exit
;#################################################################################################################################
; FUNCTIONS
;#################################################################################################################################
Func Sendmessage()
[/autoit] [autoit][/autoit] [autoit]$chatmessage = GUICtrlRead($GUIinput)
$file = FileOpen($chatfile, 1) ;DB-File
If $file = -1 Then;If unable to open file, then error message
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
;Message to DB
$displaymessage = @HOUR & ":" & @MIN & ":" & @SEC & " <"&$username&">: "&$chatmessage
FileWriteLine($file, $displaymessage)
FileClose($file)
GUICtrlSetData($GUIinput,"")
EndFunc
[/autoit] [autoit][/autoit] [autoit];#################################################################################################################################
[/autoit] [autoit][/autoit] [autoit]Func receivemessage()
[/autoit] [autoit][/autoit] [autoit]$file = FileOpen($chatfile, 0)
[/autoit] [autoit][/autoit] [autoit]; Check if file opened for reading OK
If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
$line = FileReadLine($chatfile, -1)
print($line)
;~ If GUICtrlGetState($GUIcheckbox) = 3 Then
If $line <> $displaymessage Then
_WinAPI_FlashWindowEx($chatwindow, 2, 10)
EndIf
FileClose($chatfile)
[/autoit] [autoit][/autoit] [autoit]$countlines = $countlinesneu
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit];#################################################################################################################################
[/autoit] [autoit][/autoit] [autoit]Func _MySleep($SL_Time)
Local $SL_Timer = TimerInit()
While TimerDiff($SL_Timer) < $SL_Time
Sleep(10)
WEnd
EndFunc
;#################################################################################################################################
[/autoit] [autoit][/autoit] [autoit]Func Print($line)
_GUICtrlEdit_AppendText($GUIedit,@CRLF&$line)
EndFunc ;==> Print
;#################################################################################################################################
[/autoit] [autoit][/autoit] [autoit]Func _onlinenotification()
[/autoit] [autoit][/autoit] [autoit];notification who is going online
[/autoit] [autoit][/autoit] [autoit]$file = FileOpen($chatfile, 1) ;DB-File
If $file = -1 Then;If unable to open file, then error message
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
;Message to DB
FileWriteLine($file, ">>> "&$username&" is now online. <<<")
FileClose($file)
EndFunc
[/autoit] [autoit][/autoit] [autoit];#################################################################################################################################
Func _offlinenotification()
;notification who is going offline
[/autoit] [autoit][/autoit] [autoit]$file = FileOpen($chatfile, 1) ;DB-File
If $file = -1 Then;If unable to open file, then error message
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
;Message to DB
FileWriteLine($file, ">>> "&$username&" is now offline. <<<")
FileClose($file)
EndFunc
[/autoit] [autoit][/autoit] [autoit];#################################################################################################################################
[/autoit] [autoit][/autoit] [autoit]Func _history()
[/autoit] [autoit][/autoit] [autoit]$file = FileOpen($chatfile, 0)
[/autoit] [autoit][/autoit] [autoit]; Check if file opened for reading OK
If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
$history = FileRead($chatfile)
print($history)
FileClose($file)
EndFunc
;#################################################################################################################################
[/autoit] [autoit][/autoit] [autoit][/autoit]Eigentlich funzt der auch, aber dabei gibt es einen Bug wo ich nicht weiter weiß.
Wenn man gerade am tippen ist und der Chatpartner schickt gerade eine Nachricht, dann wird das wo ich gerade am tippen bin sofort gesendet, sprich es kommen immer halb fertige Nachrichten an.
Außerdem weiß ich gar nicht ob denn das überhaupt viel Traffic verursacht im Netzwerk?
Wenn die txt-Datei klein bleibt, dann sollte es doch ok sein, oder?
Dachte man könnte vielleicht beim schließen oder so alles löschen bis auf die letzten 20 Zeilen. Naja wäre ne Idee muss ich dann mal versuchen einzubauen...