1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. M3d1c5

Beiträge von M3d1c5

  • TCP Multichat Client+Server

    • M3d1c5
    • 14. Juli 2012 um 14:49

    Hallo 666Chucky666,

    ich habe mal ein wenig rumgebastelt und es so ans Laufen bekommen:

    Multichat-Server.au3
    [autoit]

    #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>

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

    OnAutoItExitRegister("OnAutoItExit")

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

    $tGes = _Timer_Init()

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

    Global Const $sChatLogName = "ChatLog_" & @MDAY & "-" & @MON & "-" & @YEAR & ".log"
    Global Const $sGeneralLogName = "GeneralLog_" & @MDAY & "-" & @MON & "-" & @YEAR & ".log"

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

    OnAutoItStart()

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

    LogFile("@compiled: " & @Compiled, "Programm")
    LogFile("Pfad zur Exe: " & @AutoItExe, "Programm")
    LogFile("PID: " & @AutoItPID, "Programm")
    LogFile("AutoItVersion: " & @AutoItVersion, "Programm")
    LogFile("", "Programm")

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

    If TCPStartup() <> 1 Then
    MsgBox(48, "Error", "TCP-Service konnte nicht gestartet werden!" & @LF & _
    "Programm wird beendet!")
    Exit
    EndIf

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

    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"

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

    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")

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

    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

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

    _FileReadToArray($sBanListPath, $aBanList)
    _ArrayDelete($aBanList, 0)

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

    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

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

    Opt("TrayOnEventMode", 1)
    Opt("GuiOnEventMode", 1)
    Opt("TrayAutoPause", 0)
    Opt("TrayMenuMode", 1)

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

    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

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

    TrayTipExt("Server IP: " & $sIP & "" & @LF _
    & "Computername: " & $sPCNetworkName)

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

    TraySetToolTip("Server IP: " & $sIP & "" & @LF _
    & "Computername: " & $sPCNetworkName)

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

    #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

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

    #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

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

    #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

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

    #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 ###

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "ToggleClientGUI", $hClientverwaltung)
    GUISetOnEvent($GUI_EVENT_CLOSE, "HideChatGUI", $hMainGUI)

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

    GUICtrlSetState($Input1, $GUI_FOCUS)

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

    Global $hListView1 = GUICtrlGetHandle($ListView1)
    Global $hListView2 = GUICtrlGetHandle($ListView2)

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

    _GUICtrlListView_AddColumn($hListView2, "Andere Clients", 125)

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

    While 1
    Sleep(100)
    WEnd

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

    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

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

    $TempSocket = ""

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

    EndFunc ;==>CheckSocket

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

    Func CheckIncoming()
    Local $aData[1]
    Local $TempUsers

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

    For $iIndex = 0 To UBound($aUsers, 1) - 1
    $TempData = TCPRecv($aUsers[$iIndex][0], 8192)
    Select

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

    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)

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

    If $TempSearchResultName <> -1 And StringLen($aUsers[$TempSearchResultName][2]) > 0 Then
    TCPSend($aUsers[$TempSearchResultName][0], "//Kick(DoubleName)")
    TCPCloseSocket($aUsers[$TempSearchResultName][0])

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

    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

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

    For $i = 1 To UBound($aUsers, 1) - 1
    $TempUsers = $aUsers[$i][2] & ";" & $TempUsers
    Next

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

    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)

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

    Case StringLeft($TempData, 5) = "//Key"
    $TempData = StringTrimLeft($TempData, 6)
    $TempData = StringTrimRight($TempData, 1)

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

    If $TempData = "" Then ContinueCase

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

    $aUsers[$iIndex][3] = $TempData
    $TempSearchResultKey = _ArraySearch($aBanList, $TempData)

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

    If $TempSearchResultKey <> -1 Then
    $sBannedUser = _ArraySearch($aUsers, $TempData)
    TCPSend($aUsers[$sBannedUser][0], "//Kick(Banned)")
    TCPCloseSocket($aUsers[$sBannedUser][0])

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

    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

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

    Else
    TCPSend($aUsers[$iIndex][0], "//Allowed")
    EndIf

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

    $aUsers[$sBannedUser][0] = ""
    $aUsers[$sBannedUser][1] = ""
    $aUsers[$sBannedUser][2] = ""
    $aUsers[$sBannedUser][3] = ""

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

    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])

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

    $aUsers[$TempSearch][0] = ""
    $aUsers[$TempSearch][1] = ""
    $aUsers[$TempSearch][2] = ""

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

    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))

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

    Case StringLen($TempData) > 0
    _ArrayAdd($aData, $TempData)

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

    EndSelect
    Next
    If StringLen($aData[(UBound($aData, 1) - 1)]) > 0 Then

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

    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

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

    EndIf

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

    $TempUsers = ""
    $TempData = ""
    $TempSearchResultName = ""

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

    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

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

    Func AFKKick()
    EndFunc ;==>AFKKick

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

    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

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

    Func LogFile($sData, $sType)
    Switch $sType
    Case "Chat"
    _FileWriteLog(@ScriptDir & "\" & $sChatLogName, $sData)
    Case "Programm"
    _FileWriteLog(@ScriptDir & "\" & $sGeneralLogName, $sData)
    EndSwitch
    EndFunc ;==>LogFile

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

    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

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

    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

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

    Func KickSelected()
    For $iIndex = 0 To $iMaxIndexClientList - 1
    $TempStatus = _GUICtrlListView_GetItem($hListView1, $iIndex)
    If BitAND($TempStatus[0], 8) = 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] = ""

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

    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

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

    _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

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

    $TempStatus = ""
    $iTempIndex = ""
    $TempSearchResult = ""

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

    EndFunc ;==>KickSelected

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

    Func BanSelected()
    For $iIndex = 0 To $iMaxIndexClientList - 1
    $TempStatus = _GUICtrlListView_GetItem($hListView1, $iIndex)
    If BitAND($TempStatus[0], 8) = 8 Then
    $TempSearchResult = _ArraySearch($aUsers, _GUICtrlListView_GetItemText($hListView1, $iIndex))
    If $TempSearchResult <> -1 Then

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

    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

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

    TCPSend($aUsers[$TempSearchResult][0], "//Kick(AdminBan)")
    TCPCloseSocket($aUsers[$TempSearchResult][0])
    $aUsers[$TempSearchResult][0] = ""
    $aUsers[$TempSearchResult][1] = ""
    $aUsers[$TempSearchResult][3] = ""

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

    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

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

    _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

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

    $TempStatus = ""
    $iTempIndex = ""
    $TempSearchResult = ""

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

    EndFunc ;==>BanSelected

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

    Func _AdminChat()

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

    GUICtrlSetState($Input1, $GUI_FOCUS)
    GUISetState(@SW_SHOW, $hMainGUI)
    TrayItemSetState(@TRAY_ID, 68)

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

    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

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

    Case StringLower($sDataAdmin) = "shutdown"
    LogFile("Programm wird von Admin per Chatbefehle beendet!", "Programm")
    LogFile("", "Programm")
    Exit

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

    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

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

    Case StringLower(StringLeft($sDataAdmin, 4)) = "ban "
    $sName = StringRight($sDataAdmin, StringLen($sDataAdmin) - 4)
    $TempSearchResult = _ArraySearch($aUsers, $sName)
    If $TempSearchResult <> -1 Then

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

    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

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

    TCPSend($aUsers[$TempSearchResult][0], "//Kick(AdminBan)")
    TCPCloseSocket($aUsers[$TempSearchResult][0])
    $aUsers[$TempSearchResult][0] = ""
    $aUsers[$TempSearchResult][1] = ""
    $aUsers[$TempSearchResult][3] = ""

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

    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] = ""

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

    Else
    MsgBox(48, "Error", "Der User konnte nicht gefunden werden!")
    Return -1
    EndIf

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

    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

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

    GUICtrlSetData($Input1, "")
    GUICtrlSetState($Input1, $GUI_FOCUS)

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

    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

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

    Func HideChatGUI()
    GUISetState(@SW_HIDE, $hMainGUI)
    EndFunc ;==>HideChatGUI

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

    Func OnAutoItStart()
    LogFile("", "Programm")
    LogFile(" --- SERVER STARTUP --- ", "Programm")
    LogFile("", "Programm")
    LogFile("", "Chat")
    LogFile(" --- SERVER STARTUP --- ", "Chat")
    LogFile("", "Chat")
    EndFunc ;==>OnAutoItStart

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

    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

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

    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

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

    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

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

    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

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

    Func TrayTipExt($sText)
    TrayTip($sTitle, $sText, 3)
    $tTrayTipTimer = _Timer_Init()
    EndFunc ;==>TrayTipExt

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

    Func RefreshStuff()
    If _Timer_Diff($tTrayTipTimer) > 3000 Then TrayTip($sTitle, "", 1)

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

    $iLastMins = $iMins
    $iLastHour = $iHours

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

    _TicksToTime(_Timer_Diff($tGes), $iHours, $iMins, $iSecs)

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

    If $iLastMins <> $iMins Or $iLastHour <> $iHours Then
    $Time = StringFormat("%02i:%02i", $iHours, $iMins)
    TraySetToolTip("Server IP: " & $sIP & "" & @LF _
    & "Computername: " & $sPCNetworkName & "" & @LF _
    & "Server läuft: " & $Time)
    EndIf
    EndFunc ;==>RefreshStuff

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

    Func WriteMemo($sData, $sNameEdit)
    GUICtrlSetData($Edit1, GUICtrlRead($Edit1) & @HOUR & ":" & @MIN & " ~ " & $sNameEdit & " > " & $sData & @CRLF)
    EndFunc ;==>WriteMemo

    [/autoit]

    Gruß
    M3d1c5

  • Ein AntiCheat Tool

    • M3d1c5
    • 12. Juli 2012 um 17:42

    http://translation.autoit.de/onlinehilfe/functions/MsgBox.htm

  • Interessantes Verhalten einer "explorer.exe"-Datei

    • M3d1c5
    • 12. Juli 2012 um 17:11

    Das liegt wahrscheinlich am Icon-Cache von Windows.
    Windows cached Icons um sie nicht immer wieder aus dem EXE-Dateien auslesen zu müssen.
    Da das Icon der originalen explorer.exe gecached ist, wird dieses angezeigt.

  • Fehler im Script oder ein anderes Problem?

    • M3d1c5
    • 12. Juli 2012 um 13:37

    Füge doch mal direkt vor das Verbinden des Laufwerkes folgendes ein:

    [autoit]

    $iRTT = Ping("fileservername")
    _WriteLogData("Round Trip Time = " & $iRTT)

    [/autoit]

    Dann lässt Du das Script mehrmals durchlaufen.
    Der Fileserver wird gepingt und die Antwortzeit wird geloggt.
    Du vergleichst dann die Werte wo es funktioniert hat mit den Werten wo es nicht funktioniert hat.
    Wenn Du hier eindeutige Gemeinsamkeiten feststellen kannst, könntest Du dem Problem auf der Spur sein.

    Es könnte also sein, dass die Werte sehr hoch sind, wenn es nicht funktioniert das Laufwerk zu mappen und dass die Werte niedrig sind, wenn es funktioniert.

  • Ein AntiCheat Tool

    • M3d1c5
    • 12. Juli 2012 um 13:06

    Versuch es mal so:

    Spoiler anzeigen
    [autoit]

    Opt("TrayMenuMode", 3)
    Opt("TrayOnEventMode", 1)
    MsgBox(0, "Battlefront Anti-Cheat [BETA]", "Let this program running until the match is finished." & @LF & "" & @LF & "!IMPORTANT! Make sure your hotkey for screenshot in battlefront is set to p" & @LF & "" & @LF & "Close BAC after your match by pressing ctrl+1 (only on desktop, NOT INGAME!).")
    HotKeySet("^1", "EXIT1")
    $ABOUTITEM = TrayCreateItem("About")
    TrayItemSetOnEvent(-1, "About1")
    $ABOUTITEM = TrayCreateItem("How to use")
    TrayItemSetOnEvent(-1, "HowToUse1")
    $EXITITEM = TrayCreateItem("Exit")
    TrayItemSetOnEvent(-1, "Exit1")
    ;----------------------------------
    Func ABOUT1()
    MsgBox(0, "Battlefront Anti-Cheat [BETA] - About", "designed for Battlefront eSports" & @LF & "" & @LF & "centuryclan.eu/battlefront-eSports.htm" & @LF & "" & @LF & "scripted by DEAGLE" & @LF & "" & @LF & "This is only a beta version!")
    EndFunc ;==>ABOUT1
    ;-----------------------------------------------
    Func HOWTOUSE1()
    MsgBox(0, "Battlefront Anti-Cheat [BETA] - How to use", "!IMPORTANT! Make sure your hotkey for screenshot in battlefront is set to p" & @LF & "" & @LF & "How to use:" & @LF & "1. start Battlefront, connect to server" & @LF & "2. When the match is about to begin, start this program" & @LF & "3. When the match is finished, close the program by pressing ctrl+1 (or use the Exit button) !NOTE! you can not close the program via ctrl+1 if you're ingame! Close the game first!" & @LF & "" & @LF & "You only need to do the following steps if u won the match!" & @LF & "" & @LF & "4. Go into your game directory: Star Wars Battlefront\GameData\ScreenShots" & @LF & "5. zip all screenshots from the match using winzip, winrar or 7zip" & @LF & "6. Upload the zip file to >>webspace coming soon<<" & @LF & "7. Post the link to your uploaded file at the matchpage")
    EndFunc ;==>HOWTOUSE1
    ;-----------------------------------------------

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

    While 1
    If ProcessExists("Battlefront.exe") Then
    Sleep(30000)
    Send("p")
    Sleep(90000)
    Send("p")
    Sleep(120000)
    Send("p")
    Sleep(90000)
    Send("p")
    Sleep(60000)
    Send("p")
    Sleep(90000)
    Send("p")
    Sleep(120000)
    Send("p")
    Sleep(60000)
    Send("p")
    Sleep(90000)
    Send("p")
    Sleep(120000)
    Send("p")
    Sleep(90000)
    Send("p")
    Sleep(60000)
    Send("p")
    Sleep(30000)
    Send("p")
    Sleep(60000)
    Send("p")
    Sleep(90000)
    Send("p")
    Sleep(120000)
    Send("p")
    Sleep(90000)
    Send("p")
    Sleep(60000)
    Send("p")
    Sleep(30000)
    Send("p")
    Sleep(60000)
    Send("p")
    Sleep(90000)
    Send("p")
    Sleep(120000)
    Send("p")
    Sleep(90000)
    Send("p")
    Sleep(60000)
    Send("p")
    Sleep(30000)
    Send("p")
    Else
    $notingame = MsgBox(3, "Bf_eSports AntiCheat [Beta]", "You are not Ingame (anymore), should the program go on?")
    Switch $notingame
    Case 6
    MsgBox(1, "Bf_eSports AntiCheat [Beta]", "Battlefront will start now")
    Run("Battlefront.exe")
    Case 7
    ExitLoop
    EndSwitch
    EndIf
    Sleep(10)
    WEnd

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

    ;------------------------------------------------------------------------------------
    Func EXIT1()
    Exit
    EndFunc ;==>EXIT1

    [/autoit]
  • AutoIT mit WPKG?

    • M3d1c5
    • 12. Juli 2012 um 11:37

    Meinst Du mit WPKG die Softwareverteilung http://wpkg.org/ ?

  • AutoIt Array Speicherfresser?????

    • M3d1c5
    • 12. Juli 2012 um 10:10
    Zitat von RAPTOR-ONE

    Das ist aber ein gewaltiger Bug in AutoIt! :thumbdown: Die Variable ist innerhalb der Schleifen deklariert und dürfte so nie dieses Verhalten zeigen.
    Es müsste eigentlich eine Fehlermeldung kommen, wie "Benutzung einer nicht initialisierten Variable".


    Ich finde nicht, dass das ein Fehler in AutoIt ist. Es kann ja auch durchaus mal vorkommen, dass man genau dieses Verhalten mal braucht. Man muss sich halt nur vorher Gedanken darüber machen was passiert, wenn man das so durchlaufen lässt.

  • Besser spät als nie

    • M3d1c5
    • 12. Juli 2012 um 10:07

    Hallo zusammen,

    ich schreibe jetzt bereits seit ein paar Wochen hier auf autoit.de und habe mich noch gar nicht bei euch vorgestellt.

    Mein Name ist Christian, ich bin 35 Jahre alt und komme aus dem Märkischen Kreis in NRW. Ich arbeite seit 18 Jahren als Systemadministator in einem mittelständischen Produktionsbetrieb.
    In AutoIt programmiere ich schon seit ein paar Jahren und ich habe mir immer mal wieder hilfreiche Tipps aus den Foren hier geholt.

    Nun habe ich beschlossen mich hin und wieder mal aktiv zu beteiligen und vielleicht auch mal die ein oder andere UDF der Allgemeinheit zur Verfügung zu stellen.

    Ich freue mich auf nette Kontakte und hilfreiche Beiträge. :)

    Viele Grüße
    M3d1c5

  • [gelöst]Film abspielen - mein erstes Script

    • M3d1c5
    • 10. Juli 2012 um 17:14

    WinWaitClose wartet solange bis ein Fenster geschlossen wurde.

  • Domainlogonscript

    • M3d1c5
    • 10. Juli 2012 um 17:08

    Hallo kunstlust,

    schreib mir mal bitte den Link auf, wo Du die AD.au3 her hast. Dann schaue ich mir das mal für Dich an.
    Und die Ausgabe des Array $aUser hätte ich gern.

    Gruß
    M3d1c5

  • AutoIt Array Speicherfresser?????

    • M3d1c5
    • 10. Juli 2012 um 10:52

    Hi Dominic,

    bei mir knallt es auch, aber das ist ja auch nicht weiter verwunderlich...

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Gruß
    M3d1c5

    Dateien

    arraytest.png 119,55 kB – 0 Downloads
  • _MultiInput (InputBox mit einer variablen Anzahl an Eingabe-Feldern) V3.0

    • M3d1c5
    • 8. Juli 2012 um 20:39

    Hallo Stilgar und alle anderen! :)

    Zunächst möchte ich mich für diese Funktion bedanken.
    Für meine Zwecke benötigte ich eine etwas erweiterte Funktionalität, deshalb habe ich die Funktion etwas erweitert.
    Meine Änderungen möchte ich euch gerne zurückgeben.

    Zunächst habe ich einen klitzekleinen Fehler beseitigt. $sButtonL und $sButtonR waren vertauscht. Dies habe ich korrigiert.

    Erweiterungen:

    • Es ist nun möglich den Eingabefeldern der Maske Standardwerte zu übergeben.
    • Man kann die Hwnd einer Parent Maske angeben.


    Vielleicht kann das ja jemand so gebrauchen.
    Viele Grüße
    M3d1c5

    Spoiler anzeigen
    [autoit]

    ; #FUNCTION# ===================================================================
    ; Name ..........: _MultiInput
    ; Description ...: InputBox with multiple inputs
    ; AutoIt Version : V3.3.0.0
    ; Syntax ........: _MultiInput(ByRef $aText[, $aDefaultText=""[, $sTitle = ""[, $vInputStyle = -1[, $iInputWidth = 200[, $sButtonL = "OK"[, $sButtonR = "Cancel"[, $iReturnMode = 0[, $parent]]]]]]])
    ; Parameter(s): .: $aText - Array with the text for the input-controls.
    ; * Text-style:
    ; | **Text** = bold
    ; | ""Text"" = italic
    ; | __Text__ = underline
    ; | --Text-- = strike
    ; $aDefaultText - Optional: (Default = "") : Array with the default text for the input-controls. The controls will be prefilled.
    ; $sTitle - Optional: (Default = "") : Window-title
    ; $vInputStyle - Optional: (Default = -1) : Style for the input-controls.
    ; | single var for a global style, or
    ; | array for different styles
    ; * lool at the "GUI Control Styles"
    ; $iInputWidth - Optional: (Default = 200) : Width of the inputs
    ; $sButtonL - Optional: (Default = "OK") : Text of the left button
    ; $sButtonR - Optional: (Default = "Cancel") : Text of the right button
    ; $iReturnMode - Optional: (Default = 0) :
    ; | 0 Returns a single string, values seperated with the GUIDataSeparatorChar
    ; | 1 Returns an array with all values
    ; $parent - Optional: (Default = -1) : The window handle to use as the parent for this dialog.
    ; Return Value ..: Success - string or array, depending on $iReturnMode
    ; Failure - empty string
    ; @ERROR - 1 if cancel is pressed
    ; | 2 UBound($aT) <> UBound($aInputFormat)
    ; | 3 $aText not an array
    ; | 4 $aDefaultText not an array
    ; | 5 UBound($aText) <> UBound($aDefaultText)
    ; Author(s) .....: Thorsten Willert and M3d1c5
    ; Date ..........: Sun Jul 08 20:24:00 CET 2012
    ; Version .......: 3.1
    ; Example .......:
    ;
    ;Global $aTexts[5] = ["**Verzeichnis**", "Benutzer", "Passwort", "", "__Information__"]
    ;Global $aInputSt[5] = [-1, -1, 32] ; $ES_PASSWORD = 32

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

    ; Global $sValues = _MultiInput($aTexts, "", "Test", $aInputSt)
    ; If Not @error Then MsgBox(0, "", $sValues)
    ; ==============================================================================
    Func _MultiInput(ByRef $aText, $aDefaultText = "", $sTitle = "", $vInputStyle = -1, $iInputWidth = 200, $sButtonL = "OK", $sButtonR = "Cancel", $iReturnMode = 0, $parent = -1)
    Local $oldOpt = Opt('GUIOnEventMode')

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

    ; Default parameters
    If $iInputWidth < 100 Then $iInputWidth = 100
    If $iInputWidth = Default Then $iInputWidth = 200
    If $vInputStyle = Default Then $vInputStyle = -1
    If $sButtonL = Default Then $sButtonL = "OK"
    If $sButtonR = Default Then $sButtonR = "Cancel"

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

    ; Parameter check (arrays only)
    If Not IsArray($aText) Then
    SetError(3)
    Return ""
    EndIf
    If Not IsArray($aDefaultText) And $aDefaultText <> "" Then
    SetError(4)
    Return ""
    EndIf
    If IsArray($vInputStyle) And UBound($vInputStyle) <> UBound($aText) Then
    SetError(2)
    Return ""
    EndIf
    If IsArray($aDefaultText) And UBound($aText) <> UBound($aDefaultText) Then
    SetError(5)
    Return ""
    EndIf

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

    Local $iS = 6 ; char width
    Local $iT = UBound($aText)
    Local $input[$iT], $aTextStyle[$iT], $aTextWidth[$iT]
    Local $iOfs = 0, $iLen = 0
    Local $sSC = Opt("GUIDataSeparatorChar")
    Local $sRet = ""
    Local $InputStyle
    If Not IsArray($vInputStyle) Then $InputStyle = $vInputStyle

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

    ; text width and styles
    For $i = 0 To $iT - 1
    $iLen = StringLen($aText[$i])
    If $iLen > $iOfs Then $iOfs = $iLen ; max text width
    If $iOfs < 10 Then $iOfs = 10
    $aTextWidth[$i] = 400
    $aTextStyle[$i] = 0
    Select
    ; bold
    Case StringRegExp($aText[$i], '^\*\*.*?\*\*$')
    $aTextWidth[$i] = 600
    $aText[$i] = StringMid($aText[$i], 3, $iLen - 4)
    ; italic
    Case StringRegExp($aText[$i], '^"".*?""$')
    $aTextStyle[$i] = 2
    $aText[$i] = StringMid($aText[$i], 3, $iLen - 4)
    ; underline
    Case StringRegExp($aText[$i], '^__.*?__$')
    $aTextStyle[$i] = 4
    $aText[$i] = StringMid($aText[$i], 3, $iLen - 4)
    ; strike
    Case StringRegExp($aText[$i], '^--.*?--$')
    $aTextStyle[$i] = 8
    $aText[$i] = StringMid($aText[$i], 3, $iLen - 4)
    EndSelect
    Next

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

    ; GUI
    If $parent <> -1 Then GUISetState(@SW_DISABLE, $parent)
    Local $hWin = GUICreate($sTitle, $iOfs * $iS + $iInputWidth + 40, $iT * 25 + 55, -1, -1, -1, -1, $parent)
    For $i = 0 To $iT - 1
    If IsArray($vInputStyle) Then $InputStyle = $vInputStyle[$i]
    Select
    Case $aText[$i] <> ""
    GUICtrlCreateLabel($aText[$i] & ":", 16, $i * 25 + 15, $iOfs * $iS)
    GUICtrlSetFont(-1, 8.5, $aTextWidth[$i], $aTextStyle[$i])
    $input[$i] = GUICtrlCreateInput("", $iOfs * $iS + 20, $i * 25 + 10, $iInputWidth, -1, $InputStyle)
    If IsArray($aDefaultText) Then
    GUICtrlSetData($input[$i], $aDefaultText[$i])
    EndIf
    Case Else
    GUICtrlCreateLabel("", 16, 1)
    EndSelect
    Next
    Local $ok = GUICtrlCreateButton($sButtonL, 16, $i * 25 + 20, 75)
    GUICtrlSetState(-1, 512) ; $GUI_DEFBUTTON = 512
    Local $cancel = GUICtrlCreateButton($sButtonR, $iOfs * $iS + $iInputWidth - 55, $i * 25 + 20, 75)
    GUISetState(@SW_SHOW)
    ; /GUI

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

    While True
    Switch GUIGetMsg()
    Case -3, $cancel ; $GUI_EVENT_CLOSE = -3
    If $parent <> -1 Then GUISetState(@SW_ENABLE, $parent)
    GUIDelete($hWin)
    Opt('GUIOnEventMode', $oldOpt)
    SetError(1)
    Return ""
    Case $ok
    For $i = 0 To $iT - 2
    $sRet &= GUICtrlRead($input[$i]) & $sSC
    Next
    $sRet &= GUICtrlRead($input[$i])
    If $parent <> -1 Then GUISetState(@SW_ENABLE, $parent)
    GUIDelete($hWin)
    Opt('GUIOnEventMode', $oldOpt)
    If $iReturnMode = 0 Then
    Return $sRet
    Else
    Return StringSplit($sRet, $sSC, 2)
    EndIf
    EndSwitch
    WEnd
    EndFunc ;==>_MultiInput

    [/autoit]
  • ISN AutoIt Studio

    • M3d1c5
    • 2. Juli 2012 um 08:09

    Autolaser: Danke für den Hinweis. Das nächste Mal werde ich vernünftig suchen. :thumbup:

  • ISN AutoIt Studio

    • M3d1c5
    • 1. Juli 2012 um 13:43

    Ich versuche gerade ein größeres Script mit sehr vielen GUIs in ein ISN Projekt zu packen.
    Gibt es eine Möglichkeit GUI-Code, der im Script vorhanden ist als ISN GUI zu importieren, sodass ich die GUIs direkt in ISN bearbeiten kann?

  • ISN AutoIt Studio

    • M3d1c5
    • 1. Juli 2012 um 10:55

    Hallo ISI360,

    Zitat von ISI360

    ISN installiert sich Standardmäßig nach C:\ISN AutoIt Studio. Hier haben auch User schreib Rechte die keine Admin Rechte haben....


    Und genau das ist ja das Problem. Wenn mehrere Benutzer an einem Rechner mit der Software arbeiten wollen, dann müssen sie sich zwangsläufig dieselben Einstellungen teilen, da diese im Programmverzeichnis liegen.
    Wenn ein Benutzer zum Beispiel den Pfad zu seinem Projektverzeichnis in den Einstellungen von ISN ändert, dann ist das auch für alle anderen Benutzer auf dem gleichen Computer gültig...
    Nicht zu vergessen, dass das auch ein Sicherheitsproblem sein kann, wenn jeder Benutzer den Code aller anderen Benutzer sieht.

    Ich bin der Meinung, dass das noch geändert werden sollte.

    Viele Grüße
    M3d1c5

  • ISN AutoIt Studio

    • M3d1c5
    • 1. Juli 2012 um 00:36

    Hallo ISI360,

    zunächst einmal vielen Dank für diese großartige Software. Funktioniert bei mir soweit recht gut.

    Eines ist mir jedoch unangenehm aufgefallen.
    Du verwendest auf Deiner Webseite die Microsoft Logos "Kompatibel mit...".


    Ist Dir bekannt, dass Du diese Logos nur verwenden darfst, wenn Deine Software durch Microsoft getestet wurde?
    Weitere Informationen dazu findest Du hier: http://msdn.microsoft.com/de-de/windows/dd203105.aspx

    ISN AutoIt Studio läuft nur mit Administrator-Rechten unter Windows 7, wenn man es nach "C:\Program Files" installiert, welches der korrekte Ort für installierte Software ist. Ohne Administrator-Rechte können keine Einstellungen gespeichert werden.
    Schau Dir mal Seite 8 und folgende aus diesem Dokument an: http://go.microsoft.com/?linkid=9668061
    Da sind alle Voraussetzungen aufgeführt, die eine Software haben muss, um das Logo überhaupt verwenden zu dürfen.

    Außerdem werden Projekte und andere Daten standardmäßig im Programmverzeichnis abgelegt. Das sollte so eigentlich auch nicht sein.

    Nichts für ungut.

    Viele Grüße und weiterhin viel Spaß beim programmieren.
    M3d1c5

  • Burning Keyboard - Wie schnell kannst du tippen?

    • M3d1c5
    • 28. Juni 2012 um 19:42

    Lustiges Programm. :)
    Ich habe auch mal mitgespielt...
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Bilder

    • Burning_Keyboard_Result.png
      • 16,64 kB
      • 276 × 332
  • Salzen und hashen von Passwörtern mit SHA-512 (UDF)

    • M3d1c5
    • 27. Juni 2012 um 13:01

    Der Code ist jetzt nur noch auf Github verfügbar. So muss ich nicht an mehreren Stellen Code pflegen.

  • nach neue starten Windows Desktop wiederherstellen?

    • M3d1c5
    • 21. Juni 2012 um 21:35

    Hallo Automatisator,

    evtl. hilft Dir der folgende Link weiter: http://de.wikipedia.org/wiki/Kiosk-Modus

    Viele Grüße
    M3d1c5

  • Eigene Versionsnummer im kompilierter EXE ausgeben

    • M3d1c5
    • 21. Juni 2012 um 10:24

    Meinst Du das?

    [autoit]

    FileGetVersion ( "filename" [,"stringname"] )

    [/autoit]

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™