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. Lottich

Beiträge von Lottich

  • Doppelklick verhindern?

    • Lottich
    • 31. Juli 2011 um 16:37

    Hi BugFix

    Danke für den Tip!!
    Wieso ich da nicht selber dran gedacht hab, zumal ich $GUI_DISABLE ja bereits in meinem Tool verwendet hab.


    BTW: Ihr macht hier nen tollen Job! Weiter so  8)

    Nachtrag:
    Hat funktioniert, kann geclosed werden :D

  • Doppelklick verhindern?

    • Lottich
    • 31. Juli 2011 um 16:19

    Hey all

    ich hab mir eine GUI mit Buttons erstellt.
    Klickt man auf einen Button, wird etwas ausgeführt.

    Aus gewohnheit kann es aber vorkommen, dass man auf so einen Button doppelt klickt, dann wird das 2 mal ausgeführt.
    Z.B.: es wird Teamspeak doppelt gestartet und doppelt auf einen Server verbunden, oder ein Multiplayergame wird doppelt gestartet
    und das soll es aber nicht.

    Wie kann ich das verhindern?

  • working dir für URL Protokoll???

    • Lottich
    • 23. Juli 2011 um 21:05

    Bisher hatte ich das immer mit Shellexecute gemacht, indem ich die ganzen "infos" mit angegeben hab...
    Ich arbeite grad an einem Update meines Serverjoiners. Weil aber bei jedem die Games anders abgespeichert sind, macht es ja eigentlich
    nur Sinn, den Pfad zum Game aus der Registry auszulesen... nun haben ja auch alle verschiedene WindowsVersionen (XP,Vista,7, 32/64bit)
    und da sind die Registry Einträge auch alle verschieden...
    ... loool, verdammt, mir ist grad klar geworden, dass egal wie ich es anstelle, man nicht um die Pfadeingabe für das Programm herum kommt,
    denn selbst wenn ich von meinem Program das "cod4-Protokoll" eintragen lasse, braucht man ja trotzdem den Pfad...
    okay, dann werd ich wohl diesen teil des Programms so lassen müssen, wie es ist :(

  • working dir für URL Protokoll???

    • Lottich
    • 23. Juli 2011 um 19:42
    Code
    [HKEY_CURRENT_USER\Software\Classes\cod4]
    @="URL:cod4 Protocol"
    "URL Protocol"=""
    
    
    [HKEY_CURRENT_USER\Software\Classes\cod4\DefaultIcon]
    @="X:\CoD4\iw3mp.exe,1"
    
    
    [HKEY_CURRENT_USER\Software\Classes\cod4\shell\open\command]
    @="X:\CoD4\iw3mp.exe" "%1"
    Alles anzeigen

    Das ist der Code den ich in der Windows Registry eingefügt habe.Damit soll sich beim Aufruf mit "cod4://" in der URL des Webbrowsers das Game Call of Duty 4 starten.Er beginnt zwar den Start, denn es erscheint der SplashScreen vom Game. Doch dann bricht er ab, indem er mir diese Fehlermeldung um die Ohren knallt:

    Zitat

    Error during initializing.

    No IWD files in /main found.

    Es wird also nicht das Verzeichnis der EXE als WorkingDir erkannt. Wie kann ich das ändern?

  • working dir für URL Protokoll???

    • Lottich
    • 23. Juli 2011 um 04:22

    Hey all,

    Da es sich bei meiner Frage nur bedingt um AutoIt handelt, bin ich wohl im OffTopic besser aufgehoben.
    Ich versuche ein Programm per URL aufzurufen. Das Protokoll dafür hab ich bereits (eigentlich) erfolgreich
    in die Windows registry reingeschrieben, denn das Programm startet...

    Leider schmeisst mir Windows aber sofort danach ne Fehlermeldung um die Ohren

    Zitat

    Error during initialization:
    blablabla not found in /main

    Aber die Dateien sind definitiv vorhanden. Das aktuelle "working directory" wird also nicht erkannt, obwohl es ja eigentlich klar sein sollte:

    Code
    "X:\Pfad\zur.exe" "%1"

    Sicher bin ich auf dem Holzweg, denn ich glaube, das "%1" steht doch dafür, das eben dieser Pfad zur ExeDatei als "Working Dir" gilt.
    Was muss ich tun, damit

    Code
    X:\Pfad

    als "working dir" funktioniert???

  • Problem mit _MultiFileCopy

    • Lottich
    • 17. Juli 2011 um 16:12

    Ich hatte die Berechnung anpassen müssen. Jetzt werden nur noch die Dateien kopiert, die dem Datum entsprechen, dass ich zu beginn des Scripts in der InputBox eintrage.

    In meinem vorherigen Post ist die "für mich" aktuelle Version gespoilert. Man könnte jetzt noch einbauen, dass die "Start/Zielpfade" zu beginn abgefragt werden, aber für mich ist das nicht nötig, es bleibt in meinem Fall immer der gleiche Startpfad.

    Nochmals danke!! :rock:

  • Problem mit _MultiFileCopy

    • Lottich
    • 17. Juli 2011 um 11:49

    Vielleicht denk ich da einfach viel zu quer mit der Berechnung, scheint auch falsch zu sein, denn es werden keine Einträge in die "!copydata.mfc" geschrieben. Der Plan ist, wie gesagt , dass nur Dateien dort rein geschrieben werden, die nicht älter als 2 Tage sind.

    Ich hab jetzt "@error" in meinen Zeilen eingebaut und der Fehler kommt nun Tatsächlich nicht mehr. Danke Dafür.
    Es stellte sich nun aber heraus, dass meine Rechnung voll fürn Allerwertesten war, die musste ich anpassen.
    Jetzt funktioniert es.

    Spoiler anzeigen
    [autoit]

    ;===werden benötigt=============================================================
    #include
    #include

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

    Global $inputtime = InputBox("Datum des Updates", "Trage hier das Referenzdatum ein." & @LF & @LF & "!!!! Wichtig: !!!!" & @LF & @LF & "nur die Zahlen im Format: JJJJMMTT" & @LF & "Beispiel 8.März 2007 ---> 20070308", @YEAR & @MON & @MDAY)

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

    Global $strFiles = '', $strSize = 0
    ;===============================================================================

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

    ;===Beispiel 1 (erstellen der Datei "!copydata.mfc" im Quellverzeichnis)========
    Global $sSourcePath = ''

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

    Global $aReturn = _MultiFileCopy($sSourcePath)

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

    MsgBox(0, 'MFC', '"!copydata.mfc" wurde erstellt!')
    ;===============================================================================

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

    ;===Beispiel 2 (komplettes Verzeichnis kopieren)================================
    ; Alle Dateien und Unterverzeichnisse (rekursiv) werden kopiert
    ; Verzeichnisstruktur der Quelle wird übernommen
    Global $sSourcePath = ''
    Global $sDestinationPath = ''; Zielpfad (wird ggf. erstellt)

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

    Global $aReturn = _MultiFileCopy($sSourcePath, $sDestinationPath, False)
    ;===============================================================================

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

    ;===Beispiel 3 (mehrere Dateien kopieren)=======================================
    ; Alle Dateien aus dem Array werden ins Zielverzeichnis kopiert
    ; Array[0] muss die Anzahl der zu kopierenden Dateien enthalten
    ;~ Global $aSource[4] = [3, @SystemDir & '\shell32.dll', @SystemDir & '\mspaint.exe', @SystemDir & '\eula.txt']
    ;~ Global $sDestinationPath = @ScriptDir & '\Tmp2'; Zielpfad (wird ggf. erstellt)

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

    ;~ Global $aReturn = _MultiFileCopy($aSource, $sDestinationPath, False)
    ;===============================================================================

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

    ;===============================================================================
    ; Function Name: _MultiFileCopy
    ; Description:: Kopiert mehrere Dateien mit Progressbar
    ; Parameter(s): Array mit Dateien zum kopieren oder Quellpfad,
    ; Zielpfad,
    ; überschreiben? [True/False],
    ; Wenn überschreiben = True, dann PreFix zum überschreiben
    ; Return Value(s): Array mit den kopierten Dateien
    ; Requirement(s): Global $strFiles = '', $strSize = 0
    ; #include
    ; #include
    ; Author(s): Tom99, progandy, eukalyptus and Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _MultiFileCopy($aSource, $sDestPath = '', $bOverWrite = True, $sPreFix = '!Copy')
    Local $oldGUICloseOnESC = Opt('GUICloseOnESC', 0)
    Local $ret, $sShowSource, $sShowDest, $sSourcePath = '', $sNewFolder = '', $k
    Local $filetime, $filetimeist, $timedifferenz
    Local $aMFC[12] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, False, DllOpen('user32.dll')]
    If IsArray($aSource) Then
    If Not IsNumber($aSource[0]) Then Return SetError(1, 0, 0)
    For $i = 1 To $aSource[0]
    $aMFC[7] += FileGetSize($aSource[$i])
    Next
    Else
    $sSourcePath = $aSource
    If StringRight($sSourcePath, 1) <> '\' Then $sSourcePath &= '\'
    $strSize = 0
    ToolTip('Bitte warten! Verzeichnis wird eingelesen!', @DesktopWidth / 2 - 100, 10)
    If FileExists($sSourcePath & '!copydata.mfc') And $sDestPath <> '' Then
    Local $sFile = StringTrimRight(FileRead($sSourcePath & '!copydata.mfc'), 2)
    $strSize = StringLeft($sFile, StringInStr($sFile, @CRLF) - 1)
    $aSource = StringSplit(StringTrimLeft($sFile, StringInStr($sFile, @CRLF) + 1), @CRLF, 1)
    Else
    If FileExists($sSourcePath & '!copydata.mfc') Then FileDelete($sSourcePath & '!copydata.mfc')
    $aSource = _GetFilesFolder_Rekursiv($sSourcePath)
    Local $hFile = FileOpen($sSourcePath & '!copydata.mfc', 2)
    If $hFile <> -1 Then
    FileWriteLine($hFile, $strSize)
    For $i = 1 To $aSource[0]
    $filetime = FileGetTime($aSource[$i]) ; von mir hinzugefügt
    If Not @error then
    If $inputtime = ($filetime[0] & $filetime[1] & $filetime[2]) Then
    FileWriteLine($hFile, $aSource[$i]); die auch
    Endif
    EndIf
    Next
    FileClose($hFile)
    EndIf
    EndIf
    $aMFC[7] = $strSize
    ToolTip('')
    If $sDestPath = '' Then Return SetError(0, 0, 1)
    EndIf
    If StringRight($sDestPath, 1) <> '\' Then $sDestPath &= '\'
    If Not FileExists($sDestPath) Then
    If Not DirCreate($sDestPath) Then Return SetError(2, 0, 0)
    EndIf
    $sShowDest = StringRegExpReplace($sDestPath, '(.{15})(.*)(.{35})', '$1' & '[...]' & '$3')
    Local $aReturn = $aSource
    Local $callback = DllCallbackRegister('__Progress', 'int', 'uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;str')
    Local $ptr = DllCallbackGetPtr($callback)
    Local $DllKernel32 = DllOpen('kernel32.dll')
    __ProgressCreate($aMFC)
    $aMFC[9] = TimerInit()
    For $i = 1 To $aSource[0]
    $sArray = ''
    For $j = 0 To 11
    $sArray &= $aMFC[$j] & ';'
    Next
    $sFile = StringMid($aSource[$i], StringInStr($aSource[$i], '\', 0, -1) + 1)
    If $sSourcePath <> '' Then
    $sNewFolder = StringTrimLeft(StringLeft($aSource[$i], StringInStr($aSource[$i], '\', 0, -1)), StringLen($sSourcePath))
    If Not FileExists($sDestPath & $sNewFolder) Then
    If Not DirCreate($sDestPath & $sNewFolder) Then Return SetError(3, 0, 0)
    EndIf
    EndIf
    If $sFile = '' Then ContinueLoop
    $k = 0
    While $bOverWrite = False And FileExists($sDestPath & $sNewFolder & $sFile)
    $k += 1
    $sFile = $sPreFix & $k & "_" & StringMid($aSource[$i], StringInStr($aSource[$i], '\', 0, -1) + 1)
    WEnd
    $aReturn[$i] = $sDestPath & $sNewFolder & $sFile
    $sShowSource = StringRegExpReplace($aSource[$i], '(.{15})(.*)(.{35})', '$1' & '[...]' & '$3')
    GUICtrlSetData($aMFC[1], 'Kopiere Datei ' & @CRLF & '"' & $sShowSource & '"' & @CRLF & 'nach: "' & $sShowDest & '"')
    $ret = DllCall($DllKernel32, 'int', 'CopyFileExA', 'str', $aSource[$i], 'str', $aReturn[$i], 'ptr', $ptr, 'str', $sArray, 'int', 0, 'int', 0)
    ;~ ConsoleWrite('Return: ' & $ret[0] & @LF)
    If $ret[0] = 0 Then $aMFC[10] = True
    $aMFC[8] += FileGetSize($aSource[$i])
    Next
    DllClose($DllKernel32)
    DllCallbackFree($callback)
    GUIDelete($aMFC[0])
    DllClose($aMFC[11])
    Opt('GUICloseOnESC', $oldGUICloseOnESC)
    Return $aReturn
    EndFunc ;==>_MultiFileCopy

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

    Func __Progress($FileSize, $BytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData)
    Local $aSplit = StringSplit(StringTrimRight($lpData, 1), ";")
    If $aSplit[11] = 'True' Then Return 1
    Local $pos = GUIGetCursorInfo($aSplit[1])
    If _IsPressed('1B', Int($aSplit[12])) Then Return 1
    If _IsPressed('01', Int($aSplit[12])) And ($pos[4] = Int($aSplit[7])) Then Return 1
    Local $sPercent = Round($BytesTransferred / $FileSize * 100, 0), $iTime, $iTotalTime, $iTransferRate
    Local $sPercentAll = Round(($aSplit[9] + $BytesTransferred) / $aSplit[8] * 100, 0)
    $iTime = TimerDiff($aSplit[10])
    $iTotalTime = Ceiling($iTime / 1000 / ($sPercentAll + 0.1) * 100)
    ;~ $iTransferRate = _StringAddThousandsSep(Int($aSplit[8] / $iTotalTime / 1000), '.', ',')
    GUICtrlSetData($aSplit[3], $sPercent & ' %')
    GUICtrlSetData($aSplit[5], $sPercent)
    GUICtrlSetData($aSplit[4], $sPercentAll & ' % Zeit: ' & Int($iTime / 1000) & '/' & $iTotalTime & ' s (' & $iTransferRate & ' KB/s)')
    GUICtrlSetData($aSplit[6], $sPercentAll)
    EndFunc ;==>__Progress

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

    Func __ProgressCreate(ByRef $aMFC)
    If Not IsDeclared('WS_POPUPWINDOW') Then Local Const $WS_POPUPWINDOW = 0x80880000
    If Not IsDeclared('WS_EX_TOPMOST') Then Local Const $WS_EX_TOPMOST = 0x00000008
    If Not IsDeclared('WS_EX_TOOLWINDOW') Then Local Const $WS_EX_TOOLWINDOW = 0x00000080
    If Not IsDeclared('WS_EX_COMPOSITED') Then Local Const $WS_EX_COMPOSITED = 0x02000000
    $aMFC[0] = GUICreate('MultiFileCopy', 480, 220, -1, -1, $WS_POPUPWINDOW, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW, $WS_EX_COMPOSITED))
    $aMFC[1] = GUICtrlCreateLabel('', 10, 10, 460, 65)
    GUICtrlSetFont(-1, 10, 400, 0, 'Courier New')
    GUICtrlCreateLabel('Datei:', 10, 83, 60, 16)
    GUICtrlSetFont(-1, 11, 600, 0, 'Courier New')
    $aMFC[2] = GUICtrlCreateLabel('0 %', 80, 83, 390, 16)
    GUICtrlSetFont(-1, 11, 600, 0, 'Courier New')
    $aMFC[4] = GUICtrlCreateProgress(10, 100, 460, 20)
    GUICtrlCreateLabel('Gesamt:', 10, 133, 60, 16)
    GUICtrlSetFont(-1, 11, 600, 0, 'Courier New')
    $aMFC[3] = GUICtrlCreateLabel('0 %', 80, 133, 390, 16)
    GUICtrlSetFont(-1, 11, 600, 0, 'Courier New')
    $aMFC[5] = GUICtrlCreateProgress(10, 150, 460, 20)
    $aMFC[6] = GUICtrlCreateButton('Abbrechen', 200, 185, 75, 25)
    GUICtrlSetFont(-1, 9, 400, 0, 'Arial')
    GUISetState()
    EndFunc ;==>__ProgressCreate

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Anpassung: Verzeichnisgröße ermitteln für _MultiFileCopy ($strSize)
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc

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

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then
    $strSize += $file.size
    $strFiles &= $file.Path & $Delim
    EndIf
    Else
    $strSize += $file.size
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc

    [/autoit]

    danke nochmal für deine Hilfe Raupi ;)

  • Problem mit _MultiFileCopy

    • Lottich
    • 17. Juli 2011 um 01:19

    okay, recht haste natürlich xD

    Wenn ich dieses Script hier richtig verstehe, dann Kopiert es NUR die Dateien, die in der "!copydata.mfc" gelistet sind?
    Wenn dem so ist, könnte man dann die Funktion, die dafür sorgt, das die Files in die Liste geschrieben werden, so umschreiben,
    dass nur die Einträge von den Files in diese Liste eingetragen werden, die nicht älter sind als ein benutzerdefiniertes Datum?

    Ich hab schon einige Varianten durchprobiert, wie ich es am besten hinbekomme, aber es kommt immer wieder der gleiche Fehler.
    Hier mal der Code:

    Spoiler anzeigen
    [autoit]

    If IsArray($aSource) Then
    If Not IsNumber($aSource[0]) Then Return SetError(1, 0, 0)
    For $i = 1 To $aSource[0]
    $aMFC[7] += FileGetSize($aSource[$i])
    Next
    Else
    $sSourcePath = $aSource
    If StringRight($sSourcePath, 1) <> '\' Then $sSourcePath &= '\'
    $strSize = 0
    ToolTip('Bitte warten! Verzeichnis wird eingelesen!', @DesktopWidth / 2 - 100, 10)
    If FileExists($sSourcePath & '!copydata.mfc') And $sDestPath <> '' Then
    Local $sFile = StringTrimRight(FileRead($sSourcePath & '!copydata.mfc'), 2)
    $strSize = StringLeft($sFile, StringInStr($sFile, @CRLF) - 1)
    $aSource = StringSplit(StringTrimLeft($sFile, StringInStr($sFile, @CRLF) + 1), @CRLF, 1)
    Else
    If FileExists($sSourcePath & '!copydata.mfc') Then FileDelete($sSourcePath & '!copydata.mfc')
    $aSource = _GetFilesFolder_Rekursiv($sSourcePath)
    Local $hFile = FileOpen($sSourcePath & '!copydata.mfc', 2)
    If $hFile <> -1 Then
    FileWriteLine($hFile, $strSize)
    For $i = 1 To $aSource[0]
    $filetime = FileGetTime($aSource[$i])
    If Not ($inputtime - ($filetime[0] & $filetime[1] & $filetime[2])) > 2 Then FileWriteLine($hFile, $aSource[$i])
    Next
    FileClose($hFile)
    EndIf
    EndIf
    $aMFC[7] = $strSize
    ToolTip('')
    If $sDestPath = '' Then Return SetError(0, 0, 1)
    EndIf

    [/autoit]

    Das ist das Script vom 1. Beitrag dieses Topics, Auszug von Zeile 56 bis Zeile 85.
    hinzugefügt hab ich folgende Zeilen:

    [autoit]

    $filetime = FileGetTime($aSource[$i]) ; von mir hinzugefügt
    If Not ($inputtime - ($filetime[0] & $filetime[1] & $filetime[2])) > 2 Then FileWriteLine($hFile, $aSource[$i]); die auch

    [/autoit]


    Die Variable $inputdate wird "Global" zu beginn des Scripts per Inputbox aufgerufen, dort trage ich ein Referenzdatum ein.
    Und von allen Dateien in den Ordnern, die durchforstet werden, die nicht älter sind als 2 Tage, vom Referentdatum gesehen,
    sollen kopiert werden.

    Wenn ich das Script debugge wird mir weder Warnung noch Fehler angezeigt, doch führe ich das Script aus, erhalte ich immer
    diese Fehlermeldung:

    [autoit]


    >"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\Lottich\Desktop\AutoIt v3 Script (neu).au3"
    C:\Users\Lottich\Desktop\AutoIt v3 Script (neu).au3 (89) : ==> Subscript used with non-Array variable.:
    If Not ($inputtime - ($filetime[0] & $filetime[1] & $filetime[2])) > 2 Then FileWriteLine($hFile, $aSource[$i])
    If Not ($inputtime - ($filetime^ ERROR
    >Exit code: 1 Time: 7.613

    [/autoit]

    Ich komm hier einfach nicht mehr weiter, wie krieg ich diesen Fehler weg??

    mfG Lottich

  • _MultiFileCopy

    • Lottich
    • 16. Juli 2011 um 21:12

    Hey all,

    sorry dass ich dieses ältere Thema wieder ausgrabe, aber sind die Entwickler von diesem Thread noch aktiv?
    Ich mein speziell die entwickler des Scripts auf der 1. Seite dieses Threads

    Spoiler anzeigen

    Tom99, progandy, eukalyptus, Oscar und BugFix


    Ich hätte da evtl noch eine Anregung/Herausforderung für euch. Ich selbst bin leider (noch) nicht mächtig
    genug das allein zu bewerkstelligen :( 8|

    mfG Lottich

  • AutoIt um eine Funktion erweitern

    • Lottich
    • 6. Juli 2011 um 22:17

    Hallo.

    Dieser Thread ist ausschließlich an die deutschen Entwickler von Autoit gerichtet....

    in einem Englisch sprachigen Forum habe ich folgendes Script gefunden, dass man in einem Sourcecode includen kann:

    _NTServices.au3

    Hier ist die Seite mit kleiner Anleitung

    ich möchte euch darum Bitten, dieses mit in die deutsche Hilfe einzubauen und auch mit ins Paket aufzunehmen.
    Dieses Script ermöglicht es von Diensten den Status abzufragen, sowie Dienste zu starten und zu stoppen.
    Das ist äusserst hilfreich, wie ich finde, hab es auch schon erfolgreich in meinem Projekt integriert.

  • Variablen werden nicht in eine INI gespeichert?!

    • Lottich
    • 28. Mai 2011 um 20:04

    Joa, jetzt scheint alles zu funktionieren.

    Den Fehler, dass jetzt alle Einträge in die letzte INI geschrieben wurden konnte ich beheben, indem ich einfach

    $ini = $inix

    als Parameter an die Funktion writetoini() aus der Funktion davor übergeben hab.
    Das scheint jetzt alles so zu klappen, wie es soll, nun könnte ich einen ersten Testlauf machen, aber nicht am Wochenende. Da soll alles laufen.

    Danke für eure Hilfe. Ich werd mich sicher nochmal melden, denn es ist whrscheinlich, dass ich irgendwo nen Error eingebaut hab xD.

  • Variablen werden nicht in eine INI gespeichert?!

    • Lottich
    • 28. Mai 2011 um 12:14

    Okay,

    Ich hab jetzt alles nötige zusammengefasst.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <GuiButton.au3>
    #include <EditConstants.au3>

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

    ; ### Prüft, ob das Programm bereits läuft. Lässt nur 1 Instanz zu.
    $instanz = "kdsvkais"
    If WinExists ($instanz) Then Exit
    AutoItWinSetTitle ($instanz)

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

    ; ### Scriptoptionen.
    Opt("GUIOnEventMode", 1)
    Opt('MustDeclareVars', 1)
    Opt("WinTitleMatchMode",1)

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

    Local $colorbackground = 0x4A82B5
    Local $colorblack = 0x000000
    Local $colorstatic = 0xFFF000
    Local $font = "Comic Sans MS"
    Local $titel = "TEST Serverwatcher"
    Local $ini1 = @ScriptDir & "\test1.ini"
    Local $ini2 = @ScriptDir & "\test2.ini"
    Local $mainwindow, $buttonname, $buttonserver1, $checkmanumod, $buttonserver1mam, $inix, $name, $mamname
    Local $pfad, $game, $port, $config, $exe, $pb, $rcon, $mod, $plmax, $plprv, $message, $start
    Local $header, $starten, $stoppen, $restart, $opendir, $editme, $back, $iniwindow, $inibuttonback, $takeover
    Local $input1, $input2, $input3, $input4, $input5, $input6, $input7, $input8, $input9, $input10, $input11, $input12, $input13

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

    guicreation()
    Func guicreation() ; Benutzeroberfläche wird erstellt.
    $mainwindow = GUICreate ("IFA Serverwatcher v2.0 in Entwicklung", 800, 600,0,0)
    GUISetState (@SW_SHOW)
    GUISetOnEvent ($GUI_EVENT_CLOSE, "ProgrammBeenden")
    GUISetBkColor ($colorbackground)
    GUICtrlSetDefColor ($colorblack)
    GUISetFont (40, 400, 4, $font)
    GUICtrlCreateLabel ($titel, 40, 20)
    GUISetFont (11, 400, 0, $font)
    GUICtrlSetDefBkColor($colorstatic)
    buttons()
    EndFunc

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

    Func buttons() ; Serverbuttons werden erstellt und Funktionen werden zugewiesen.
    GUISwitch($mainwindow)
    $buttonname = IniRead($ini1,"Name des Buttons","Name des Buttons", "...noch frei...")
    $buttonserver1 = GUICtrlCreateButton($buttonname, 40,100,150)
    $buttonname = _GUICtrlButton_GetText($buttonserver1)
    $checkmanumod = IniRead($ini1,"Manu Admin Mod nutzen","Manu Admin Mod nutzen", "")
    If $checkmanumod= "ja" Then $buttonserver1mam = GUICtrlCreateButton("MAM " & $buttonname, 200,100,180)
    If $buttonname = "" Then GUICtrlDelete ($buttonserver1)
    If $buttonname = "" Then GUICtrlDelete ($buttonserver1mam)
    GUICtrlSetOnEvent($buttonserver1, "server1")
    GUICtrlSetOnEvent($buttonserver1mam, "mamserver1")
    EndFunc

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

    Func server1() ; Verhalten des Serverbuttons, Prüft den Gametype und liest Infos aus. Leitet weiter an Funktion "buttonscreate".
    GUISwitch($mainwindow)
    buttonsdelete()
    $inix = $ini1
    $name = IniRead($inix, "Name des Buttons", "Name des Buttons","")
    $pfad = IniRead($inix, "Pfad zur Exe", "Pfad zur Exe","")
    $game = IniRead($inix, "welches Game", "welches Game","")
    $port = IniRead($inix, "Port", "Port","")
    $config = IniRead($inix, "Name der Serverconfig", "Name der Serverconfig","")
    $exe = IniRead($inix, "Name der Exe", "Name der Exe","")
    $pb = IniRead($inix, "Punkbuster", "Punkbuster","")
    $rcon = IniRead($inix, "Passwort RCon", "Passwort RCon","")
    $mod = IniRead($inix, "Name des Mods", "Name des Mods","")
    $plmax = IniRead($inix, "Maximale Spielerzahl", "Maximale Spielerzahl","")
    $plprv = IniRead($inix, "Anzahl Private Slots", "Anzahl Private Slots","")
    $message= $name & " ist bereits gestartet."
    If $game = "cod4" Then

    ; Hier mit If/ElseIf mit einer Select/Case Verschachtelung um die Variable $start mit den richtigen Parametern zu versehen
    ; Es wird mit den oben ausgelesenen Variablen jongliert

    EndIf
    IniWrite($inix, "Startparameter", "Startparameter", $start)
    buttonscreate()
    EndFunc

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

    Func mamserver1() ; Liest Infos des Manumods und leitet diese weiter an Funktion "buttonscreate2".
    GUISwitch($mainwindow)
    buttonsdelete()
    $inix = $ini1
    $name = IniRead($inix, "Name des Buttons", "Name des Buttons","")
    $mamname= "MAM " & $name
    $pfad = IniRead($inix, "Pfad zu MAM", "Pfad zu MAM", "")
    $message= $mamname & " ist bereits gestartet."
    buttonscreate2()
    EndFunc

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

    Func buttonscreate() ; erstellt "Aktionsgruppe" zur Serverkontrolle eines Serverbuttons.
    $header = GUICtrlCreateGroup ($name, 400, 150, 200, 340)
    $starten = GUICtrlCreateButton("starten", 450, 185, 100)
    $stoppen = GUICtrlCreateButton("stoppen", 450, 225, 100)
    $restart = GUICtrlCreateButton("restart", 450, 265, 100)
    $opendir = GUICtrlCreateButton("öffne Ordner", 450, 325, 100)
    $editme = GUICtrlCreateButton("bearbeiten", 450, 365, 100)
    $back = GUICtrlCreateButton("zurück ", 450, 425, 100)
    ;~ GUICtrlSetOnEvent($starten, "serverstarten")
    ;~ GUICtrlSetOnEvent($stoppen, "serverstoppen")
    ;~ GUICtrlSetOnEvent($restart, "serverrestart")
    ;~ GUICtrlSetOnEvent($opendir, "openserver")
    GUICtrlSetOnEvent($editme, "openini")
    GUICtrlSetOnEvent($back, "buttonsdelete")
    EndFunc

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

    Func buttonscreate2() ; erstellt "Aktionsgruppe" zur Serverkontrolle eines ManuMod-Buttons.
    $header = GUICtrlCreateGroup ($mamname, 400, 150, 200, 340)
    $starten = GUICtrlCreateButton("starten", 450, 185, 100)
    $stoppen = GUICtrlCreateButton("stoppen", 450, 225, 100)
    $restart = GUICtrlCreateButton("restart", 450, 265, 100)
    $opendir = GUICtrlCreateButton("öffne Ordner", 450, 325, 100)
    $back = GUICtrlCreateButton("zurück ", 450, 425, 100)
    ;~ GUICtrlSetOnEvent($starten, "mamserverstarten")
    ;~ GUICtrlSetOnEvent($stoppen, "mamserverstoppen")
    ;~ GUICtrlSetOnEvent($restart, "mamserverrestart")
    ;~ GUICtrlSetOnEvent($opendir, "openserver")
    GUICtrlSetOnEvent($back, "buttonsdelete")
    EndFunc

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

    Func openini() ; Übernimmt Daten des gedrückten Buttons und öffnet die INI des gewählten Servers / ManuMods.
    $iniwindow = GUICreate($name,600,600,803,0)
    GUISetState (@SW_SHOW)
    GUISetOnEvent ($GUI_EVENT_CLOSE, "ProgrammBeenden2")
    GUISetBkColor ($colorbackground)
    $inibuttonback = GUICtrlCreateButton("Abbruch",50,550, 100)
    $takeover = GUICtrlCreateButton("übernehmen",450, 550, 100)
    GUICtrlSetOnEvent($inibuttonback, "ProgrammBeenden2")
    GUICtrlSetOnEvent($takeover, "writetoini")
    GUISetFont (11, 400, 0, $font)
    Select
    Case $game = "ts3"
    GUICtrlCreateLabel("Welcher Art soll der Server angehören?" ,30,100)
    $input1 = GUICtrlCreateInput($game, 350, 95, 200)
    GUICtrlCreateLabel("Wie soll der Name des Buttons lauten?" ,30,140)
    $input2 = GUICtrlCreateInput($name, 350, 135,200)
    GUICtrlCreateLabel("Welchen Port soll der Server nutzen?" ,30,180)
    $input5 = GUICtrlCreateInput($port, 350, 175, 200)
    GUICtrlCreateLabel("Nenn mir den Pfad zur Server.exe!" ,30,220)
    $input10 = GUICtrlCreateInput($pfad, 350, 215, 200)
    GUICtrlCreateLabel("Nenn mir den Namen der Server.exe!" ,30,260)
    $input11 = GUICtrlCreateInput($exe, 350, 255, 200)

    Case Else
    $game = InputBox("Serverart wählen...", "Welcher Natur soll der Server werden?")
    Select
    Case $game = "ts3"
    GUICtrlCreateLabel("Welcher Art soll der Server angehören?" ,30,100)
    $input1 = GUICtrlCreateInput($game, 350, 95, 200)
    GUICtrlCreateLabel("Wie soll der Name des Buttons lauten?" ,30,140)
    $input2 = GUICtrlCreateInput($name, 350, 135,200)
    GUICtrlCreateLabel("Welchen Port soll der Server nutzen?" ,30,180)
    $input5 = GUICtrlCreateInput($port, 350, 175, 200)
    GUICtrlCreateLabel("Nenn mir den Pfad zur Server.exe!" ,30,220)
    $input10 = GUICtrlCreateInput($pfad, 350, 215, 200)
    GUICtrlCreateLabel("Nenn mir den Namen der Server.exe!" ,30,260)
    $input11 = GUICtrlCreateInput($exe, 350, 255, 200)
    EndSelect
    EndSelect
    EndFunc

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

    Func writetoini() ; Schreibt die nötigen Einträge in die INI.
    IniWrite($inix, "welches Game", "welches Game", GUICtrlRead($input1))
    IniWrite($inix, "Name des Buttons", "Name des Buttons", GUICtrlRead($input2))
    IniWrite($inix, "Manu Admin Mod nutzen", "Manu Admin Mod nutzen", GUICtrlRead($input3))
    IniWrite($inix, "Pfad zu MAM", "Pfad zu MAM", GUICtrlRead($input4))
    IniWrite($inix, "Port", "Port", GUICtrlRead($input5))
    IniWrite($inix, "Punkbuster", "Punkbuster", GUICtrlRead($input6))
    IniWrite($inix, "Name des Mods", "Name des Mods", GUICtrlRead($input7))
    IniWrite($inix, "Name der Serverconfig", "Name der Serverconfig", GUICtrlRead($input8))
    IniWrite($inix, "Passwort RCon", "Passwort RCon", GUICtrlRead($input9))
    IniWrite($inix, "Pfad zur Exe", "Pfad zur Exe", GUICtrlRead($input10))
    IniWrite($inix, "Name der Exe", "Name der Exe", GUICtrlRead($input11))
    IniWrite($inix, "Maximale Spielerzahl", "Maximale Spielerzahl", GUICtrlRead($input12))
    IniWrite($inix, "Anzahl Private Slots", "Anzahl Private Slots", GUICtrlRead($input13))
    EndFunc

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

    Func ProgrammBeenden() ; Beendet das Programm und alle laufenden Funktionen
    Exit
    EndFunc

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

    Func ProgrammBeenden2() ; Beendet die 2. GUI
    GUIDelete($iniwindow)
    EndFunc

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

    Func buttonsdelete() ; Entfernt die "Aktionsgruppe" zur Serverkontrolle. Wichtig für die Übersicht.
    GUICtrlDelete($header)
    GUICtrlDelete($starten)
    GUICtrlDelete($stoppen)
    GUICtrlDelete($restart)
    GUICtrlDelete($opendir)
    GUICtrlDelete($editme)
    GUICtrlDelete($back)
    EndFunc

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

    ; ### Funktion: Verhalten dieses Programms während es gestartet ist.
    While 1
    ;~ safemode()
    ;~ watch()
    ;~ checker()
    ;~ cleaner()
    Sleep(10000)
    WEnd

    [/autoit]


    Die Variable $inix wird übergeben, sobald auf den Button geklickt wird, genau wie alle andern Variablen auch.
    Als Test kann man sich ja mal ne test.ini anlegen , das Script starten und bei der Eingabe ts3 eintippen.

  • Variablen werden nicht in eine INI gespeichert?!

    • Lottich
    • 28. Mai 2011 um 00:49

    Zweck den mein Programm erfüllen soll:

    Es handelt sich um eine Benutzeroberfläche, die meine Clanserver überwacht (neu starten wenn sie abschmieren, automatisch bereinigen, und quasi alles machen, was ich sonst per hand erledigen muss. Das Programm läuft auch schon einwandfrei in der Version 1.6, allerdings ist das Maßgeschneidert und verträgt KEINE Änderungen, und unterstützt nur die im Quellcode hinterlegten Server/Teamspeak. Schreibt mir Logs, behebt Fehlermeldungen, die bei manchen Server unerwartet und unregelmässig auftauchen, mir auch anzeigt, welche Gameserver überwacht werden und welche nicht, und und und.

    Aber es ist nicht flexibel genug.
    Also muss ne neue Version her. Eine, die so Flexibel ist, dass ich nur noch INI die Pro Server bearbeiten brauch. Das funktioniert auch. Bisher hatte ich das so, dass mir die übergebene
    Server.ini mit notepad++ geöffnet wurde, aber da die INI mehrere Sektionen hat (von denen je nach Situation nicht alle gebraucht werden) und nicht nur ich auf das Programm zugreifen werde, ist es doch klüger, über eine GUI mit Input-Felder nur jene "benötigten Eingaben" aufzulisten, die gerade gebraucht werden.

    Ich bin es vorher auch theoretisch durchgegangen und mit den gesammelten Erkenntnissen aus der momentan aktuellen Version 1.6 ist es am sinnvollsten mit mehreren INI´s zu arbeiten, das erleichtert die Arbeit mit dem Übergeben der Variablen.
    Mag sein und ist auch wahrscheinlich, dass ihr viel mehr auf dem Kasten habt als ich, aber ich arbeite erst seit gut 2 Monaten mit autoit und hab vorher auch noch nie sowas in der Richtung gemacht. Sicher kriegt ihr mein gesammten Code viel kleiner hin als ich, aber ich bin sehr zufrieden mit dem, was ich bisher gebaut hab.

    zurück zum Thema

    Ich übergebe alle nötigen Parameter.
    also, dass passiert:
    Ich starte das Programm, es entsteht eine GUI mit 10 Buttons, die jeweils für einen möglichen Gameserver stehen. bei Klick auf einen Button wird die entsprechende INI ausgelesen und eine neue "Button-Gruppe" erstellt. die ausgelesenen Parameter werden an diese Gruppe weiter gegeben. In dieser Gruppe befindet sich auch ein Edit-Button der mir eine neue GUI aufmacht, mit den Daten der entsprechenden INI als Vorgabe in den Input-Feldern.
    Das tut es auch einwandfrei.

    Will ich dann etwas ändern, oder ich hab zu beginn auf einen Button geklickt, der noch keine Einträge in der INI hat, dann muss/soll/will ich ja die Eingaben in den Inputfeldern machen. nachdem ich die Eingaben gemacht hab klick ich auf den Button "Übernehmen" der die Funktion aufruft, in der die Eingaben der Inputfelder in die besagte INI reinschreibt.

    Und er macht auch die Einträge. Es werden in der dem Button zugehörenden INI die korrekten Sektionen und Schlüssel eingetragen, Nur nicht die Werte aus den Inputfeldern.
    Also stimmt doch eigentlich soweit alles mit dem Parameter übergeben. Die Variablen für die Iputfelder sind auch deklariert, sonst hätte mir das der Syntax-Check doch bemängelt.

    Allerdings frage ich bei einem "freien Button" per Input-Box ab, welcher Art der Gameserver sein soll. Dieser Wert wird komischerweise eingetragen.


    Nachtrag:

    Jetzt hab ich es endlich.... ich hab vergessen dem Button "Übernehmen" die Funktion zum INIschreiben zuzuweisen. Dachte es würde reichen

    [autoit]

    If $takeover Then writetoini()

    [/autoit]


    War offensichtlich ein Trugschluss. Jetzt hab ich aber wieder das Problem, dass $inix die letzte Server.ini ist und nicht mehr die, des gedrückten Serverbuttons. Das is doch zum Mäuse melken.

  • Variablen werden nicht in eine INI gespeichert?!

    • Lottich
    • 27. Mai 2011 um 22:06

    Hallo ihr beiden.

    Arrays machen bei mir keinen Sinn, weil ich einfach zu viele verschiedene Variablen habe, die in mehreren Funktionen verwendet werden sollen. insgesammt beläuft sich mein kleines Script momentan mit 47 Funktionen auf 3680 Zeilen und diese sind fast alle mit select/case und darin noch mit if und elseif verschachtelt. Würd ich da auch noch mit arrays arbeiten, käm ich ja gar nicht mehr klar :D

    Zum Thema Global
    Ich hab bei mir die opt must declare vars auf 1 gesetzt. demzufolge sind alle Variablen mit Local versehen. und da klappts doch auch mit den "Wert übertragungen"...
    Aber ich werd das gleich mal testen

    Nachtrag:
    Das mit dem Global kann es eigentlich nicht sein, weil:
    wenn ich (innerhalb dieser Funktion) auf einen anderen Button klicke, wo schon Einträge in einer anderen INI vorhanden sind, dann wird mir das in den Input-Feldern
    vorgegeben, das Lesen funzt mit Local, und das Schreiben ja eigentlich auch, denn mir wird von diesem Code

    [autoit]

    IniWrite($inix,"Name des Buttons","Name des Buttons", GUICtrlRead($input1))

    [/autoit]

    folgendes in die INI (wo es dann auch rechtmässig rein soll, habe 10 INI´s) geschrieben

    Code
    [Name des Buttons]
    Name des Buttons=

    Und ich kann machen was ich will, er schreibt mir einfach nicht das in die INI, was ich in dem Inputfeld reingeschrieben hab.

  • Variablen werden nicht in eine INI gespeichert?!

    • Lottich
    • 27. Mai 2011 um 09:43

    Hallo.
    Hier ist ein kleiner Ausschnit aus dem Programm, welches ich fast fertig gestellt hab. Aber vor nem grossen Testlauf auf meinem ROOT muss ich noch dieses kleine Problem fixen, irgendwie...

    [autoit]

    Case $game = "ts3"
    GUICtrlCreateLabel("Welcher Art soll der Server angehören?" ,30,100)
    $input1 = GUICtrlCreateInput($game, 350, 95, 200)
    GUICtrlCreateLabel("Wie soll der Name des Buttons lauten?" ,30,140)
    $input2 = GUICtrlCreateInput($name, 350, 135,200)
    GUICtrlCreateLabel("Welchen Port soll der Server nutzen?" ,30,180)
    $input5 = GUICtrlCreateInput($port, 350, 175, 200)
    GUICtrlCreateLabel("Nenn mir den Pfad zur Server.exe!" ,30,220)
    $input10 = GUICtrlCreateInput($pfad, 350, 215, 200)
    GUICtrlCreateLabel("Nenn mir den Namen der Server.exe!" ,30,260)
    $input11 = GUICtrlCreateInput($exe, 350, 255, 200)
    EndSelect
    EndSelect
    If $takeover Then
    writetoini()
    EndIf
    EndFunc
    Func writetoini()
    $read1=GUICtrlRead($input1)
    IniWrite($inix, "welches Game", "welches Game", $read1)
    $read2=GUICtrlRead($input2)
    IniWrite($inix, "Name des Buttons", "Name des Buttons", $read2)
    $read3=GUICtrlRead($input3)
    IniWrite($inix, "Manu Admin Mod nutzen", "Manu Admin Mod nutzen", $read3)
    $read4=GUICtrlRead($input4)
    IniWrite($inix, "Pfad zu MAM", "Pfad zu MAM", $read4)
    $read5=GUICtrlRead($input5)
    IniWrite($inix, "Port", "Port", $read5)

    [/autoit]

    Die Variable $takeover ist ein Button, der bei Klick die Werte der Input-Felder in die INI schreiben soll.

    Wie gesagt, ist nur ein Ausschnitt. Es wurde eine 2. GUI erstellt, hat je nach Situation aus vorheriger Funktion verschiedene Labels und unterschiedliche Anzahl an Input-Feldern.
    Die Eingaben, die ich in den Input-Feldern mache, sollen in eine INI gespeichert werden. Davon hab ich 10 stück an der Zahl. Die richtige INI wird mir durch vorherige Funktionen bereitgestellt und auch die Einträge funktionieren fast perfekt. Die Sektionen und Schlüssel werden in die richtige INI geschrieben aber die Werte aus den Inputboxen werden einfach nicht eingetragen! Nur ab und an mal ne Null bei einer Sektion, die nicht durch ein Input-Feld geändert werden soll. Das ist aber okay, da im weiteren Verlauf diese Einträge keine Rolle spielen. Aber:

    Warum zum Henker werden Variablen der Input-Felder nicht in die INI geschrieben?
    Diese Varianten funktionieren nicht:

    [autoit]

    $read1=GUICtrlRead($input1)
    IniWrite("beispiel.ini","texte","say1", $read1)

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

    ;oder
    IniWrite("beispiel.ini","texte","say1", GUICtrlRead($input1))

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

    ;oder hab auch auf die letzt genannte Funktion verzichtet, ohne Erfolg...

    [/autoit]


    Was muss ich anders machen??

  • Pro Schlüssel soll ein Button erzeugt werden.

    • Lottich
    • 18. Mai 2011 um 08:17

    Hallo Community,

    seit heute bin ich hier der neue und wie es sich für nen "Frischling" gehört, hab ich auch gleich eine Frage.
    Ich schreibe ein Programm, dass auf einem ROOT läuft. Ich hab die "alpha-Version darauf schon laufen und es funktioniert super.

    Leider ist es zu unflexibel. Es ist maßgeschneidert auf den aktuellen Zustand des ROOTs. Will ich da Änderungen vornehmen
    (was hinzufügen oder wegnehmen), dann kann das Programm nicht mehr richtig arbeiten. Ist nicht Sinn der Sache, bei jeder Änderung wieder
    das Script rauszupacken, im Code rumzufriemeln und dann wieder zu kompilieren...

    Also zum Eingemachten:

    Das Programm soll mir meine Gameserver steuern. Die Informationen, die es braucht, holt es sich aus einer INI-Datei.
    Um es flexibler zu gestalten, wär es sinnvoll, für jeden vorhandenen Schlüssel in der INI automatisch einen neuen Button zu erstellen.
    Und genau das ist mein Problem.

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <needs\gamecheck.au3>

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

    ; ### Scriptoptionen.
    Opt("GUIOnEventMode", 1)
    Opt('MustDeclareVars', 1)

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

    ; ### Variablen scriptbasierend werden deklariert.
    Local $ini = @ScriptDir & "\needs\server.ini"
    Local $font, $titel, $mainwindow, $sect, $i, $button, $name, $game, $von_links, $von_oben, $game

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

    ; ### Benutzeroberfläche wird erstellt.
    $font = "Comic Sans MS"
    $titel = "Serverwatcher"
    $mainwindow = GUICreate ("Serverwatcher v1.5 alpha", 800, 600)
    GUISetState (@SW_SHOW)
    GUISetOnEvent ($GUI_EVENT_CLOSE, "ProgrammBeenden")
    GUISetBkColor (0xA6C5E9)
    GUICtrlSetDefColor (0xFF0000)
    GUISetFont (20, 400, 4, $font)
    GUICtrlCreateLabel ($titel, 180, 30)
    GUICtrlSetDefColor (0x000000)
    GUISetFont (10, 400, 0, $font)

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

    $i = "1"
    $sect = IniReadSection($ini, $i)
    If Not @error Then
    $von_links = 80
    $von_oben = 130
    $name = IniRead($ini, $i, "Servername intern", "")
    $game = IniRead($ini, $i, "Game", "")
    $button = GUICtrlCreateButton($name, $von_links, $von_oben, 150)
    GUICtrlSetOnEvent($button, "gamecheck")
    EndIf

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

    $i = "2"
    $sect = IniReadSection($ini, $i)
    If Not @error Then
    $von_links = 80
    $von_oben = 130 + 20 * $i
    $name = IniRead($ini, $i, "Servername intern", "")
    $game = IniRead($ini, $i, "Game", "")
    $button = GUICtrlCreateButton($name, $von_links, $von_oben, 150)
    GUICtrlSetOnEvent($button, "gamecheck")
    EndIf

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

    $i = "3"
    $sect = IniReadSection($ini, $i)
    If Not @error Then
    $von_links = 80
    $von_oben = 130 + 20 * $i
    $name = IniRead($ini, $i, "Servername intern", "")
    $game = IniRead($ini, $i, "Game", "")
    $button = GUICtrlCreateButton($name, $von_links, $von_oben, 150)
    GUICtrlSetOnEvent($button, "gamecheck")
    EndIf

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

    Func ProgrammBeenden()
    Exit
    EndFunc

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

    While 1
    Sleep(1000)
    WEnd

    [/autoit]


    Die Funktion gamecheck() wird dann von einem anderemScript durchgeführt, welches ein "Select Case Szenario" enthällt:

    [autoit]

    #include <cod4.au3>
    Local $game

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

    gamecheck()

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

    Func gamecheck()
    Select
    Case $game = "cod4"
    cod4()

    Case $game = "cod6"
    ;~ cod6()

    Case $game = "coduo"
    ;~ coduo()

    Case $game= "ts3"
    ;~ ts3()

    Case $game = "homefront"
    ;~ homefront()

    EndSelect
    EndFunc

    [/autoit]


    Anschliessend wird dann die Funktion aufgerufen, für die das Select-Case-Szenario zutrifft. Zu Testzwecken hab ich als Aktion eine MsgBox die mir dann eine Meldung ausgibt, wie der Server zu starten ist (Parameter).

    Und das grosse Problem hierbei:
    Mir werden 3 Buttons angezeigt, doch nur der 1. hat den tatsächlichen Namen, wie er sein muss, die beiden anderen sind fast nur striche ohne Namen.
    Wenn ich diese dann anklicke, dann bekomm ich eine Meldung, die gar nicht zutreffen sollte. Versuch ich das nur mit einem Eintrag im ersten Quellcode, dann funktioniert es.

    Auch beim Start des ersten Scripts wird mir, bevor die Programmoberfläche angezeigt wird, die Meldung angezeigt, die nur erscheinen dürfte, wenn ich auf den Button klicke.
    WTF, i need help!

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™