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

  • TreeView - Probleme / Planlos beim Befüllen

    • Lottich
    • 6. Juni 2015 um 19:09

    Hey,

    ihr kennt doch sicher auch die Problematik mit Müttern, die einem das Leben so richtig schwer machen können?!
    Meine stellte mich vor die Herausforderung, ein FahrtenbuchTool für sie zu erschaffen. Damit liegt sie mir auch ganz schön in den Ohren.
    Ja, was tut man nicht alles, um seiner Mami das Leben ein wenig zu erleichtern.... :saint:

    Damit bin ich auch schon recht gut voran gekommen. _GoogleMaps.au3 sei Dank :thumbup:
    Fahrtenbücher werden erfolgreich angelegt, Kundenstamm kann bearbeitet werden (falls einer umzieht oder neue hinzu kommen), Routenberechnung anhand der Kundendaten usw...

    Nun stehe ich aber vor einem Problem, bei dem ich nicht mehr weiss, wie ich das umsetzen soll. Vermutlich weil ich dazu nicht clever genug bin, oder weil ich das viel zu kompliziert versuche.
    Es geht um die Darstellung der Fahrtenbücher innerhalb des Tools. Ich möchte die Daten in einer TreeView darstellen in folgender Aufteilung:

    Code
    2012
        Januar
              01 (Montag)
              02 (Dienstag)
        Februar
              01 (Montag)
              02 (Dienstag)
    2013
        Januar
              01 (Montag)
              02 (Dienstag)
        Februar
              01 (Montag)
              02 (Dienstag)
    ...
    ...
    ...
    Alles anzeigen


    Das mit den Jahren und Monaten kriege ich noch selber gebacken, ABER die Tage... die machen mich fertig! :cursing:

    Das komplette Script kann ich kaum posten, da ich darin auch mit eigenen Includes arbeite und auch mit einer Verzeichnisstruktur, die bei euch nicht gegeben sein wird.
    Darum habe ich ein kleines Beispiel zurecht geschustert. Ein GUI mit 2 TreeViews. Links ist die TreeView, die ich erstelle und rechts ist ein Beispiel, so wie es aussehen soll.

    lauffähiges Scriptbeispiel
    AutoIt
    #include <Array.au3>
    #include <GuiTreeView.au3>
    #include <GuiConstants.au3>
    
    
    ; Dieses Array ist ein Beispiel dafür, wie die Daten aus den FahrtenbuchDateien zurück gegeben werden.
    Global $a_FahrtenbuchDaten[13][3] = [[12], ["2012", "November", "01  (Montag)"], ["2012", "November", "02  (Dienstag)"], ["2012", "Dezember", "03  (Mittwoch)"], ["2013", "Oktober", "04  (Donnerstag)"], _
    		["2013", "November", "05  (Freitag)"], ["2013", "Dezember", "06  (Samstag)"], ["2014", "November", "07  (Sonntag)"], ["2014", "November", "08  (Montag)"], _
    		["2014", "November", "09  (Dienstag)"], ["2015", "Juni", "10  (Mittwoch)"], ["2015", "August", "11  (Donnerstag)"], ["2015", "Oktober", "12  (Freitag)"]]
    
    
    ; Dieses Array ist ein Beispiel dafür, wie FileListToArray() in der Funktion "TreeView_Fahrtenbuch()" die Daten zurück gibt.
    Global $a_Fahrtenbuch[5] = [4, "Fahrtenbuch 2012.dat", "Fahrtenbuch 2013.dat", "Fahrtenbuch 2014.dat", "Fahrtenbuch 2015.dat"]
    
    
    Global $hGui, $hSoSollsWerden, $hTreeView
    
    
    
    
    Func _TreeView_Fahrtenbuch() ; <---------------- Um diese Funktion dreht sich das Ganze.
    	_GUICtrlTreeView_DeleteAll($hTreeView)
    	Local $Anzahl_Jahre = $a_Fahrtenbuch ; <---- Diese beiden Arrays werden im eigentlichen Script zwar anders deklariert,
    	Local $a_FB_DATA = $a_FahrtenbuchDaten ; <-- aber im Endeffekt sind die Inhalte der Daten absolut identisch.
    
    
    	Local $Index_Total = $a_FB_DATA[0][0], $Monat = "", $MonatCheck = "", $Jahr = ""
    	Dim $hItem_Jahr[$Anzahl_Jahre[0] + 1], $hItem_Monat[1], $hItem_Tag[1]
    
    
    	For $i = 1 To $Anzahl_Jahre[0]
    		$Jahr = StringTrimRight(StringRight($Anzahl_Jahre[$i], 8), 4)
    		$hItem_Jahr[$i] = _GUICtrlTreeView_Add($hTreeView, 0, $Jahr)
    		GUICtrlSetFont(-1, 12, 800)
    		$MonatCheck = ""
    		For $k = 1 To $Index_Total
    			If $a_FB_DATA[$k][0] = $Jahr Then
    				$Monat = $a_FB_DATA[$k][1]
    				If $Monat <> $MonatCheck Then
    					_GUICtrlTreeView_AddChild($hTreeView, $hItem_Jahr[$i], $Monat)
    
    
    
    
    
    
    
    
    
    
    
    
    				EndIf
    				$MonatCheck = $Monat
    			EndIf
    		Next
    	Next
    	_GUICtrlTreeView_Expand($hTreeView)
    EndFunc   ;==>_TreeView_Fahrtenbuch
    #Region ####; Do not touch anything below this line ;-)))
    Func _SoSollsSein()
    	$hSoSollsWerden = GUICtrlCreateTreeView(250, 50, 200, 500)
    	GUICtrlSetBkColor(-1, 0xFFFBBB)
    	GUICtrlSetFont(-1, 12)
    	Local $1 = _GUICtrlTreeView_Add($hSoSollsWerden, 0, "2012")
    	Local $2 = _GUICtrlTreeView_Add($hSoSollsWerden, 0, "2013")
    	Local $3 = _GUICtrlTreeView_Add($hSoSollsWerden, 0, "2014")
    	Local $4 = _GUICtrlTreeView_Add($hSoSollsWerden, 0, "2015")
    	Local $1_1 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $1, "November")
    	Local $1_2 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $1, "Dezember")
    	Local $2_1 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $2, "Oktober")
    	Local $2_2 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $2, "November")
    	Local $2_3 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $2, "Dezember")
    	Local $3_1 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $3, "November")
    	Local $4_1 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $4, "Juni")
    	Local $4_2 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $4, "August")
    	Local $4_3 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $4, "Oktober")
    	Local $1_1_1 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $1_1, "01  (Montag)")
    	Local $1_1_2 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $1_1, "02  (Dienstag)")
    	Local $1_2_1 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $1_2, "03  (Mittwoch)")
    	Local $2_1_1 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $2_1, "04  (Donnerstag)")
    	Local $2_2_1 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $2_2, "05  (Freitag)")
    	Local $2_3_1 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $2_3, "06  (Samstag)")
    	Local $3_1_1 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $3_1, "07  (Sonntag)")
    	Local $3_1_2 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $3_1, "08  (Montag)")
    	Local $3_1_3 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $3_1, "09  (Dienstag)")
    	Local $4_1_1 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $4_1, "10  (Mittwoch)")
    	Local $4_2_1 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $4_2, "11  (Donnerstag)")
    	Local $4_3_1 = _GUICtrlTreeView_AddChild($hSoSollsWerden, $4_3, "12  (Freitag)")
    	_GUICtrlTreeView_Expand($hSoSollsWerden)
    EndFunc   ;==>_SoSollsSein
    $hGui = GUICreate("TestGUI", 470, 560)
    GUISetBkColor(0xFFFBBB)
    GUICtrlCreateLabel("So soll es aussehen...", 250, 20, 200, 30, $SS_CENTER)
    GUICtrlSetFont(-1, 12, 800, 4)
    GUICtrlCreateLabel("So ist es aktuell...", 20, 20, 200, 30, $SS_CENTER)
    GUICtrlSetBkColor(-1, 0xBBBBBB)
    GUICtrlSetFont(-1, 12, 800, 4)
    _SoSollsSein()
    $hTreeView = GUICtrlCreateTreeView(20, 50, 200, 500)
    GUICtrlSetBkColor(-1, 0xBBBBBB)
    GUICtrlSetFont(-1, 12)
    _TreeView_Fahrtenbuch(); Diese Funktion soll mir das TreeView mit den Daten aus dem Array "$a_FahrtenbuchDaten" befüllen.
    GUISetState(@SW_SHOW)
    While 1
    	Switch GUIGetMsg()
    		Case $Gui_Event_Close
    			Exit
    	EndSwitch
    WEnd
    #EndRegion ####; Do not touch anything below this line ;-)))
    Alles anzeigen

    Das Problem ist, dass ich nicht weiss, wie ich die subitems der Tage den subitems der Monate zuordnen soll.
    Kann mir jemand weiterhelfen?

    MfG, Lo..

  • Samsung S5 und AutoIt (gelöst)

    • Lottich
    • 3. Juni 2015 um 12:00
    Zitat von baerchen

    Aber wenn man schon dabei sind, das Java ach so scheiße ist, @Andy,

    Das hat er nie behauptet. Wenn du richtig lesen könntest, hättest du bemerkt, dass er auf dotNET hinweist...

    Zitat von baerchen

    Wieso benutzt du dann ein Smartphone? Müsstest sicherlich wissen, das Anwendungen ohne Java nicht laufen würde oder generell

    Und was genau soll das bedeuten?
    1. ist diese Frage schwachsinnig.
    2. wenn du schreiben könntest, bzw in der Schule besser aufgepasst hättest, würde sich das nicht so lesen lassen, als hätte das ein *** geschrieben.

    Eines muss man dir aber lassen. Du bleibst deiner Linie treu. Es gibt schliesslich kaum ein Post von dir, in dem du dich anders ausdrückst :D

  • Samsung S5 und AutoIt (gelöst)

    • Lottich
    • 1. Juni 2015 um 22:12

    Hey Alina,

    ich glaube nicht, dass es möglich ist. Angeblich basiert das AndroidOS zwar auf LINUX und auf LINUX kann man ja das Programm "Wine" laufen lassen, mit dem man eine Windowsumgebung simuliert und somit auch einige Win Anwendungen laufen lassen kann. Aber ich bezweifle, dass dieses Wine auf Android funktioniert. Ich lass mich aber gerne eines besseren belehren. Hab selber das S5 und sollte es doch möglich sein, hätte ich was neues zum spielen ^^

  • Tail in GUI wird nicht mehr beendet.

    • Lottich
    • 25. Mai 2015 um 21:42
    reines Beispiel um GUIOnEventMode ein- und auszuschalten
    AutoIt
    Func _neu()
    	Opt("GUIOnEventMode", 0); <--- hier schalte ich den GUIOnEvent Modus weg, damit diese Funktion mit GUIGetMsg() arbeiten kann
    	GUISetState(@SW_DISABLE, $hGUI_1)
    	$aData = _LFS_GetData_2D($TheFile)
    	Local $newText = "", $newText_1 = "", $newText_2 = "", $newText_3 = "", $newText_4 = "", $errorcheck = ""
    	Local $hGUI_2 = GUICreate("Eintrag hinzu fürgen", 300, 160)
    	GUISetFont(10)
    	Local $input01 = GUICtrlCreateInput("", 80, 010, 210, 25)
    	Local $input02 = GUICtrlCreateInput("", 80, 040, 210, 25)
    	Local $input03 = GUICtrlCreateInput("", 80, 070, 210, 25)
    	Local $input04 = GUICtrlCreateInput("", 80, 100, 210, 25)
    	Local $button01 = GUICtrlCreateButton("übernehmen", 30, 130, 100, 25)
    	Local $button02 = GUICtrlCreateButton("abbrechen", 170, 130, 100, 25)
    	GUISetState(@SW_SHOW, $hGUI_2)
    	While Sleep(50)
    		Switch GUIGetMsg()
    			Case $GUI_EVENT_CLOSE, $button02
    				ExitLoop
    			Case $button01
    				If "blablabla" = "bliblablub" Then
    					_mach_was_unglaubliches($mit_dieser_Variable, "und mit diesem Text")
    				EndIf
    				If $newText_1 <> "" And $newText_2 <> "" And $newText_3 <> "" And $newText_4 <> "" Then
    					; erst wenn diese Bedingung erfüllt ist, wird die Schleife verlassen, falls $button01 geklickt wurde
    					ExitLoop
    				EndIf
    		EndSwitch
    	WEnd
    	GUIDelete($hGUI_2)
    	Opt("GUIOnEventMode", 1); <-- dieser Punkt ist erreicht, nachdem die Schleife verlassen wurde. Die Funktion wird definitiv verlassen,
    							; darum schalte ich den GUIOnEventMode wieder ein.
    	GUISetState(@SW_ENABLE, $hGUI_1)
    EndFunc   ;==>_neu
    Alles anzeigen
  • Tail in GUI wird nicht mehr beendet.

    • Lottich
    • 25. Mai 2015 um 20:14

    Du kannst aber beide Varianten in deinem Script nutzen. Dabei musst du aber unbedingt darauf achten, dass sich die beiden Varianten nicht in die Quere kommen.
    D.H. wenn du mit GuiGetMsg() arbeitest musst du vorher den OnEventMode ausschalten.

  • TeamSpeak 3 Probleme

    • Lottich
    • 25. Mai 2015 um 17:15

    Hi

    Wenn du eine Tastenkombi mit ALT senden willst, dann steht das ! für die ALT-Taste. Ein Blick in die Hilfe ("Send Key List") wird dir mehr auskunft darüber geben.
    Zu dem Problem mit dem Fenster aktivieren: ich hab es selber noch nicht ausprobiert, aber festgestellt, dass sich das Teamspeak3 nach einer gewissen Zeit ins SysTray minimiert.

    Vermutlich liegt es daran, dass es dann manchmal mit dem Aktivieren nicht funktioniert. Wie genau man das dann trotzdem aktivieren kann, weiss ich leider auch nicht genau, aber ich würde einiges durchprobieren.

    @sw_maximize, control...- commands usw.

    Nachtrag:
    Natürlich kannst du auch in den Teamspeak3 Optionen das Minimieren ins SysTray unterbinden.
    Gehe dazu in die Optionen und wähle links die Rubrik "Design". Dann hast du rechts einen Bereich namens "Tray Icon" mit 2 Checkboxen. Dort einfach den entsprechenden Haken entfernen.

    Vielleicht reicht das ja schon aus.

  • Forum Problemsammlung

    • Lottich
    • 23. Mai 2015 um 07:35
    Zitat von autoiter

    Meine Fragen lauten:
    Wird an der Wiederherstellung der Anhänge gearbeitet?
    Wie lange wird das mutmaßlich dauern?

    Ja und nein. Ja, weil die couragiertesten User hier nach und nach ihre Uploads wiederfinden und neu uploaden, oder gar neu schreiben.
    Dabei ist es denen natürlich selbst überlassen, ob sie sich die Mühe machen oder nicht. Der dahinter stehende Zeitaufwand sollte klar sein.
    Nein, weil von dem einen Admin, der von dreien verblieben ist, leider nur noch sporadisch was zu lesen ist. Aber auch hier gilt: wer weiss schon, was dahinter steckt, was er um die Ohren hat?
    Es gibt nunmal Dinge, die man nicht öffentlich bekannt gibt!

    Grundprinzipiell kann man sich einfach nur wiederholen und um Geduld bitten.

    Nachtrag:
    Ich kann @Andy nur beipflichten. Eigentlich sollte das auch jedem klar sein, darum bin ich auch nur auf die eigentlichen Fragen eingegangen :D

    Nachtrag 2:
    @autoiter: hab mal eben die "Kritik" an dich nachgelesen... Weiss nicht so recht... vielleicht solltest du dir mal ein etwas dickeres Fell besorgen?! Denn so schlimm wars ja nun wirklich nicht, dass man sowas schreiben muss wie "wenn ihr mich nun rausschmeisst blabla". Immer locker bleiben ^^

  • Systray Reste? Wie entfernen?

    • Lottich
    • 20. Mai 2015 um 15:09

    Wenn ich mich recht erinnere, kann man das mit WinClose() lösen. Ich nehme an, du beendest truecrypt per ProcessClose.
    Das reicht in einigen Fällen (oder gar allen?) nicht aus. Versuch mal, unmittelbar bevor du den Prozess beendest, WinClose() einzubauen.

  • TeamSpeak3 in Channel gehen

    • Lottich
    • 18. Mai 2015 um 15:12

    Vielleicht solltet ihr euch den Startpost nochmal genauer durchlesen...

  • Do-Funktion um Abbruchkriterium MaxTime erweitern

    • Lottich
    • 12. Mai 2015 um 22:26

    Warum arbeitest du mit Call? Wenn ich in einer If Anweisung Funktionen aufrufen will, dann schreib ich diese einfach hinein. in deinem Fall so:

    AutoIt
    Func _sowieso_blibla()
        Local $hTimer = TimerInit()
        Local $MaxTime = 70
        Do
            Sleep(1000)
            $logastart=PixelSearch(245, 700, 266, 715, 0xDCEEFF)
        Until @error = 0 Or TimerDiff($hTimer) > ($MaxTime * 1000)
    
    
        If TimerDiff($hTimer) > ($MaxTime * 1000) Then
            $statusLeague = 0
            $statusTeam = 0
            quitCheck()
            Exit
        Else
            $statusLeague = 1
            $result = $result & 'ShowLeague: OK, '
        EndIf
    EndFunc
    Alles anzeigen

    Egal welche Bedingung erfüllt wird, also ob das Then oder das Else zutrifft, wird der entsaprechende Bereich der Reihe nach abgearbeitet.

  • Do-Funktion um Abbruchkriterium MaxTime erweitern

    • Lottich
    • 12. Mai 2015 um 03:50
    AutoIt
    Local $MaxTime = 700, $hTimer = TimerInit()
    Do
        Sleep(1000)
        $logastart = PixelSearch(245, 700, 266, 715, 0xDCEEFF)
    Until @error = 0 Or TimerDiff($hTimer) > ($MaxTime * 1000)

    Hier mal dein "Do Until" aus deinem Startpost. Leicht abgeändert. Die Deklaration von $MaxTime so abgeändert, dass dort die tatsächlichen Sekunden eingetragen werden kann und
    in Zeile 5 korrigiert (ganz nach dem logischen Ansatzl von @alpines )

  • GTA Online PC - Mitspieler gesucht

    • Lottich
    • 3. Mai 2015 um 04:24

    Ich hab schon meine eigene coole Crew (inkl. meiner Wenigkeit bestehen wir aus 2 Membern bisher ^^)

    Off Topic (im Off Topic): Das Chatsystem übern SocialClub ist das Letzte!

  • GTA Online PC - Mitspieler gesucht

    • Lottich
    • 2. Mai 2015 um 23:10

    Hab euch beide soeben ne Anfrage geschickt :)

    als Lottich xD

  • Variable als INI behandeln?

    • Lottich
    • 23. April 2015 um 04:22

    Du meine Fresse, dass muss ich erstmal sacken lassen!
    OFFTOPIC: Woher zum Henker weiss man sowas?!

    BugFix, ich werde diese Variante garantiert ausprobieren. Leider werde ich dabei vermutlich den oberen Code von dir 1:1 übernehmen müssen, denn für mich ist das "gehobene Klasse".
    Ganz ehrlich, ich weiss grad nicht, was ich schreiben soll. Es ist ziemlich spät, bin müde und fühl mich grad von dieser Informationsflut ziemlich erschlagen und ein wenig gedemütigt 8o

  • Variable als INI behandeln?

    • Lottich
    • 21. April 2015 um 23:10

    OMG, ganz offensichtlich bin ich meinen ehemaligen DAU - Status doch noch nicht los. Bisher bin ich immer davon ausgegangen, das DLLs unveränderlich wären
    und "nur" Funktionen enthalten, die Programme benötigen, damit sie funktionieren. Programmbibliothek eben.

    Das Paket, was ich von dir erhalten hab, wurde natürlich schon ausführlich von mir begutachtet und als fantastisch eingestuft. Jetzt heisst es für mich Infos
    einzuziehen, was der DLL Code genau bedeutet und was du mit XOR meinst ^^ Man muss ja erstmal verstehen, was da passiert, bevor man anfangen kann,
    vernünftig damit zu arbeiten. Dann werd ich jetzt mal anfangen Onkel Google zu nerven :D

    Danke Andy
    (wärst du eine Frau, würd ich jetzt sagen: "Du bist ein Schatz!" )

  • Variable als INI behandeln?

    • Lottich
    • 20. April 2015 um 22:33

    Danke Andy!

    Ich habe bisher noch nie mit DLLs gearbeitet, weil ich es bis heute nur 1x gebraucht hatte und bei diesem einen mal konnte ich das (natürlich) umständlich umgehen. :D

    Zitat von Andy

    Ist die DLL einmal erstellt, kann man simpelst die darin enthaltenen Daten per Stringreplace() ändern!

    Verstehe ich das richtig? Ich kann dann Daten INNERHALB dieser DLL ändern, sodass beim nächsten Programmaufruf die geänderten/neuen Daten vorhanden sind?
    Wenn das möglich ist, werde ich mich doch mal mit DLLs auseinander setzen.

  • Variable als INI behandeln?

    • Lottich
    • 18. April 2015 um 18:19

    Nach einigem herum experimentieren hab ich das für mich nun doch noch lösen können, ohne dass die INI in irgendeiner Form entschlüsselt irgendwo abgelegt wird.
    Hab mich dabei von @Kanashius inspirieren lassen. Dabei bin ich von einer INI-typischen Syntax abgewichen. JA, das hab ich nach @Andy s Anregung zu verdanken.


    Code
    Sektionsname1 ø Adresse der Website1 ø Anmeldename1 ø Passwort1
    Sektionsname2 ø Adresse der Website2 ø Anmeldename2 ø Passwort2
    ...
    ...


    Die Funktionen lassen sich beinahe genauso verwenden, wie die herkömmlichen INI Befehle. Als UDF ists aber noch nicht tauglich, da so gut wie kein Errorhandling eingebaut ist.
    Doch falls es trotzdem jemanden interessiert

    ist hier der Code
    AutoIt
    Global $Splitter = "ø"
    
    
    Func _Mem_TextToArray($DataHandle)	; wandelt die Datei in ein 2D Array
    	Local $aRet[0][5], $split_1, $split_2, $count = 0
    	$split_1 = StringSplit($DataHandle, @CRLF, 1)
    	For $i = 1 To $split_1[0]
    		If StringLeft($split_1[$i], 1) <> ";" Then
    			If StringInStr($split_1[$i], $Splitter) Then
    				$split_2 = StringSplit($split_1[$i], $Splitter)
    				$count += 1
    				ReDim $aRet[$count + 1][5]
    				$aRet[0][0] += 1
    				$aRet[$count][0] = $split_2[1] ;=>	Sektion
    				$aRet[$count][1] = $split_2[2] ;=>	Adresse
    				$aRet[$count][2] = $split_2[3] ;=>	Username
    				$aRet[$count][3] = $split_2[4] ;=>	Passwort
    				$aRet[$count][4] = $split_2[5] ;=>	Datum
    			EndIf
    		EndIf
    	Next
    	Return $aRet
    EndFunc   ;==>_Mem_TextToArray
    
    
    Func _Mem_ArrayToText($aArray)		; wandelt das Array in einen String
    	Local $string = ""
    	For $i = 1 To $aArray[0][0]
    		$string &= $aArray[$i][0] & $Splitter & $aArray[$i][1] & $Splitter & $aArray[$i][2] & $Splitter & $aArray[$i][3] & $Splitter & $aArray[$i][4]
    		If $i < $aArray[0][0] Then $string &= @CRLF
    	Next
    	Return $string
    EndFunc   ;==>_Mem_ArrayToText
    
    
    Func _Mem_IniDelete(ByRef $aArray, $Section)
    	$index = _ArraySearch($aArray, $Section)
    	If $index = -1 Then
    		Return SetError(-1, 0, "Funktion:" & @TAB & "_Mem_IniDelete ==> _ArraySearch" & @CRLF & "Fehler:" & @TAB & @error)
    	Else
    		_ArrayDelete($aArray, $index)
    		$aArray[0][0] -= 1
    	EndIf
    EndFunc   ;==>_Mem_IniDelete
    
    
    Func _Mem_IniWrite(ByRef $aArray, $Section, $Key, $Value)
    	If $Key = "Adresse" Then
    		$Key = 1
    	ElseIf $Key = "Username" Then
    		$Key = 2
    	ElseIf $Key = "Passwort" Then
    		$Key = 3
    	ElseIf $Key = "Datum" Then
    		$Key = 4
    	Else
    		Return SetError(-1, 0, "Funktion:" & @TAB & "_Mem_IniWrite" & @CRLF & "Fehler:" & @TAB & "3" & @CRLF & "Falscher Schlüssel")
    	EndIf
    	$index = _ArraySearch($aArray, $Section)
    	If $index <> -1 Then
    		$aArray[$index][$Key] = $Value
    		$aArray[$index][4] = @MDAY & "." & @MON & "." & @YEAR
    	Else
    		ReDim $aArray[$aArray[0][0] + 2][5]
    		$aArray[0][0] += 1
    		$aArray[$aArray[0][0]][0] = $Section
    		$aArray[$aArray[0][0]][$Key] = $Value
    		$aArray[$aArray[0][0]][4] = @MDAY & "." & @MON & "." & @YEAR
    	EndIf
    EndFunc   ;==>_Mem_IniWrite
    
    
    Func _Mem_IniWriteSection(ByRef $aArray, $Section, $Adresse = "", $Username = "", $Userpasswort = ""); auf mich zugeschnitten
    	If $Adresse <> "" Then _Mem_IniWrite($aArray, $Section, "Adresse", $Adresse)
    	If $Username <> "" Then _Mem_IniWrite($aArray, $Section, "Username", $Username)
    	If $Userpasswort <> "" Then _Mem_IniWrite($aArray, $Section, "Passwort", $Userpasswort)
    EndFunc   ;==>_Mem_IniWriteSection
    
    
    Func _Mem_IniRenameSection(ByRef $aArray, $Section_Alt, $Section_Neu)
    	$index = _ArraySearch($aArray, $Section_Alt)
    	If $index <> -1 Then
    		$aArray[$index][0] = $Section_Neu
    		$aArray[$index][4] = @MDAY & "." & @MON & "." & @YEAR
    	Else
    		SetError(-1, 0, "Funktion:" & @TAB & "_Mem_IniRenameSection" & @CRLF & "Fehler:" & @TAB & "3" & @CRLF & "Sektion nicht vorhanden!")
    	EndIf
    EndFunc   ;==>_Mem_IniRenameSection
    
    
    Func _Mem_IniRead($aArray, $Section, $Key)
    	If $Key = "Adresse" Then
    		$Key = 1
    	ElseIf $Key = "Username" Then
    		$Key = 2
    	ElseIf $Key = "Passwort" Then
    		$Key = 3
    	ElseIf $Key = "Datum" Then
    		$Key = 4
    	Else
    		Return SetError(-1, 0, "Funktion:" & @TAB & "_Mem_IniRead" & @CRLF & "Fehler:" & @TAB & "3" & @CRLF & "Falscher Schlüssel")
    	EndIf
    	$index = _ArraySearch($aArray, $Section)
    	If $index <> -1 Then
    		Return $aArray[$index][$Key]
    	Else
    		Return SetError(-1, 0, "Funktion:" & @TAB & "_Mem_IniRead ==> _ArraySearch" & @CRLF & "Fehler:" & @TAB & @error)
    	EndIf
    EndFunc   ;==>_Mem_IniRead
    
    
    Func _Mem_IniReadSection($aArray, $Section)
    	Local $aRet[1]
    	$index = _ArraySearch($aArray, $Section)
    	If $index <> -1 Then
    		ReDim $aRet[5]
    		$aRet[0] = 4
    		For $i = 1 To $aRet[0]
    			$aRet[$i] = $aArray[$index][$i]
    		Next
    		Return $aRet
    	EndIf
    	SetError(-1, 0, -1)
    EndFunc   ;==>_Mem_IniReadSection
    
    
    Func _Mem_IniReadSectionNames($aArray)
    	Local $aRet[$aArray[0][0] + 1]
    	$aRet[0] = $aArray[0][0]
    	For $i = 1 To $aArray[0][0]
    		$aRet[$i] = $aArray[$i][0]
    	Next
    	Return $aRet
    EndFunc   ;==>_Mem_IniReadSectionNames
    Alles anzeigen

    @Andy: ich bin mir beinahe sicher, dass du mich für diese Vorgehensweise und diesem Code mit sofortiger Wirkung aus deiner Firma rauswerfen würdest :D

  • Variable als INI behandeln?

    • Lottich
    • 17. April 2015 um 18:50

    Das kann ich eigentlich ausschliessen. Nachdem ich meine INI Überarbeitet hatte (wie oben erwähnt) ist da kein einziges unnötiges Leerzeichen mehr vorhanden.

  • Variable als INI behandeln?

    • Lottich
    • 17. April 2015 um 18:41

    hi Kanashius

    Hab in der letzten Funktion $i zu $k geändert und nun klappts. Da hätt ich aber auch selber drauf kommen können/müssen.
    Leider besteht das Problem bei _MemIni_iniWrite noch immer.
    Nachdem ich auf Fehlersuche ging, stellte sich heraus, dass es eigentlich funktionieren sollte.
    Die Funktion findet die Sektion, den Schlüssel und den Wert. Der Wert wird auch innerhalb der Funktion geändert.
    2MsgBoxen und 1 _ArrayDisplay() innerhalb besagter Funktion beweisen das.

    Aber im Gegensatz zur von dir im Script erstellten Beispiel INI, wo es natürlich reibungslos klappt, wird es bei mir nicht übernommen,
    obwohl ein und die selbe Funktion zum Einsatz kommt ?(

    nochmals aktualisierter Code mit echter INI (nicht als DLL)
    AutoIt
    #include <Array.au3>
    #include <String.au3>
    
    
    Global $TheFile = @ScriptDir & "\test.ini" ; Beispielinhalt der fertig entschlüsselten Datei
    If Not FileExists($TheFile) Then _Base64String($TheFile)
    
    
    
    
    
    
    ;~ Global $IniArray=_MemIni_readIni("[General]"&@crlf&"MainGui_X=-1"&@crlf&"MainGui_Y=0"&@crlf&"MainGui_Width=1920"&@crlf&"MainGui_Height=1090")
    ;~ _MemIni_iniWrite($IniArray,"General","MainGui_X","1920")
    ;~ _ArrayDisplay(_MemIni_getAllChilds($IniArray, "General"))
    
    
    Global $IniArray = _MemIni_readIni(FileRead($TheFile))
    _ArrayDisplay(_MemIni_getAllChilds($IniArray, "PayPal"), "VOR _MemIni_iniWrite()")
    _MemIni_iniWrite($IniArray, "PayPal", "Passwort", "neues Passwort")
    _ArrayDisplay(_MemIni_getAllChilds($IniArray, "PayPal"), "NACH _MemIni_iniWrite()")
    
    
    
    
    
    
    Func _MemIni_iniWrite(ByRef $array, $cat, $key, $value)
    	$index = _ArraySearch($array, $cat)
    	If $index <> -1 Then
    		$array2 = $array[$index][1]
    		$index = _ArraySearch($array2, $key)
    		If $index <> -1 Then
    			MsgBox(0, "altes Passwort", $array2[$index][1])
    			$array2[$index][1] = $value
    			MsgBox(0, "neues Passwort", $array2[$index][1])
    		Else
    			ReDim $array2[UBound($array2) + 1][2]
    			$array2[UBound($array2) - 1][0] = $key
    			$array2[UBound($array2) - 1][1] = $value
    		EndIf
    		$array[$index][1] = $array2
    		;bis hier her funktioniert es, wie die beiden MsgBoxen und das nächste _ArrayDisplay beweisen.
    		;Aber es wird einfach nicht übernömmen.
    		_ArrayDisplay($array[$index][1], "Array aus der Funktion")
    	Else
    		ReDim $array[UBound($array) + 1][2]
    		$array[UBound($array) - 1][0] = $cat
    		Local $array2[1][2]
    		$array2[UBound($array2) - 1][0] = $key
    		$array2[UBound($array2) - 1][1] = $value
    		$array[UBound($array) - 1][1] = $array2
    	EndIf
    EndFunc   ;==>_MemIni_iniWrite
    
    
    #Region  ;  funktionierende Funktionen
    Func _MemIni_readIni($data)
    	Local $ar, $IniArray[0][2], $ar2
    	$ar = StringSplit($data, @CRLF, 1 + 2)
    	For $i = 0 To UBound($ar) - 1 Step 1
    		If $ar[$i] <> "" Then
    			If StringInStr($ar[$i], "[") = 1 And StringInStr($ar[$i], "]", 0, -1) = StringLen($ar[$i]) Then
    				ReDim $IniArray[UBound($IniArray) + 1][2]
    				$IniArray[UBound($IniArray) - 1][0] = _StringBetween($ar[$i], "[", "]")[0]
    			Else
    				If $IniArray[UBound($IniArray) - 1][1] <> "" Then
    					$IniArray[UBound($IniArray) - 1][1] &= "|#-#|"
    				EndIf
    				$IniArray[UBound($IniArray) - 1][1] &= $ar[$i]
    			EndIf
    		EndIf
    	Next
    	For $i = 0 To UBound($IniArray) - 1 Step 1
    		$IniArray[$i][1] = StringSplit($IniArray[$i][1], "|#-#|", 1 + 2)
    		$ar = $IniArray[$i][1]
    		Local $ar3[UBound($ar)][2]
    		For $l = 0 To UBound($ar) - 1 Step 1
    			$ar2 = StringSplit($ar[$l], "=", 1 + 2)
    			$ar3[$l][0] = $ar2[0]
    			$ar3[$l][1] = $ar2[1]
    		Next
    		$IniArray[$i][1] = $ar3
    	Next
    	Return $IniArray
    EndFunc   ;==>_MemIni_readIni
    
    
    Func _MemIni_getAllChilds($array, $cat)
    	$index = _ArraySearch($array, $cat)
    	If $index <> -1 Then
    		Return $array[$index][1]
    	EndIf
    	SetError(-1, 0, -1)
    EndFunc   ;==>_MemIni_getAllChilds
    
    
    Func _MemIni_getKey($array, $cat, $key)
    	$index = _ArraySearch($array, $cat)
    	If $index <> -1 Then
    		$array = $array[$index][1]
    		$index = _ArraySearch($array, $key)
    		If $index <> -1 Then
    			Return $array[$index][1]
    		EndIf
    	EndIf
    	SetError(-1, 0, -1)
    EndFunc   ;==>_MemIni_getKey
    
    
    Func _MemIni_getStringData($array)
    	$string = ""
    	For $i = 0 To UBound($array) - 1 Step 1
    		$string &= "[" & $array[$i][0] & "]" & @CRLF
    		$ar = $array[$i][1]
    		For $k = 0 To UBound($ar) - 1 Step 1
    			$string &= $ar[$k][0] & "="
    			$string &= $ar[$k][1] & @CRLF
    		Next
    	Next
    	Return $string
    EndFunc   ;==>_MemIni_getStringData
    
    
    Func _Base64String($bSaveBinary = False, $sSavePath = @ScriptDir)
    	Local $Base64String
    	$Base64String &= 'W0F1ZGlibGVdDQpBZHJlc3NlPWh0dHBzOi8vd3d3LmF1ZGlibGUuZGUvc2lnbi1pbg0KVXNlcm5hbWU9QXVkaWJsZU5pY2tuYW1lDQpQYXNzd29ydD1BdWRpYmxlUGFzc3dvcnQNCmxhc3QgbW9kaWZpZWQ9MTMuMDYuMjAxMg0KDQpbQXV0b0l0XQ0KQWRyZXNzZT1odHRwczovL2F1dG9pdC5kZS9pbmRleC5waHAvTG9naW4NClVzZXJuYW1lPUF1dG9JdE5pY2tuYW1lDQpQYXNzd29ydD1BdXRvSXRQYXNzd29ydA0KbGFzdCBtb2RpZmllZD0wNy4wNi4yMDE0DQoNCltnbXguZGVdDQpBZHJlc3NlPWh0dHBzOi8vd3d3LmdteC5kZQ0KVXNlcm5hbWU9R214Tmlja25hbWUNClBhc3N3b3J0PUdteFBhc3N3b3J0DQpsYXN0IG1vZGlmaWVkPTEyLjExLjIwMTQNCg0KW0FtYXpvbl0NCkFkcmVzc2U9aHR0cHM6Ly93d3cuYW1hem9uLmRlL3NpZ24taW4NClVzZXJuYW1lPUFtYXpvbk5pY2tuYW1lDQpQYXNzd29ydD1BbWF6b25QYXNzd29ydA0KbGFzdCBtb2RpZmllZD0yMC4wNi4yMDEyDQoNCltCZWNrZXIgTmF2aWdhdGlvbl0NCkFkcmVzc2U9aHR0cDovL3Nob3AubW9iaWxlbmF2aWdhdGlvbi5teWJlY2tlci5jb20vaW5kZXgucGhwPw0KVXNlcm5hbWU9QmVja2VyTmlja25hbWUNClBhc3N3b3J0PUJlY2tlclBhc3N3b3J0DQpsYXN0IG1vZGlmaWVkPTIyLjA2LjIwMTINCg0KWzEgdW5kIDEgTG9naW5dDQpBZHJlc3NlPWh0dHA6Ly93d3cuMXVuZDEuZGUvbG9naW4NClVzZXJuYW1lPTF1bmQxTmlja25hbWUNClBhc3N3b3J0PTF1bmQxUGFzc3dvcnQNCmxhc3QgbW9kaWZpZWQ9MDIuMTAuMjAxMg0KDQpbUGF5UGFsXQ0KQWRyZXNzZT1odHRwczovL3d3dy5wYXlwYWwuY29tL2RlL2NnaS1iaW4vd2Vic2NyP2NtZD1fbG9naW4tcnVuDQpVc2VybmFtZT1QYXlQYWxOaWNrbmFtZQ0KUGFzc3dvcnQ9UGF5UGFsUGFzc3dvcnQNCmxhc3QgbW9kaWZpZWQ9MjkuMDQuMjAxNQ0KDQpbT3JpZ2luIChFQSldDQpBZHJlc3NlPWh0dHBzOi8vY29ubmVjdC5vcmlnaW4uY29tL2RlL2xvZ2luDQpVc2VybmFtZT1PcmlnaW5OaWNrbmFtZQ0KUGFzc3dvcnQ9T3JpZ2luUGFzc3dvcnQNCmxhc3QgbW9kaWZpZWQ9MDguMDIuMjAxMw0KDQpbR29vZ2xlIHBsYXldDQpBZHJlc3NlPWh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9TZXJ2aWNlTG9naW4NClVzZXJuYW1lPUdvb2dsZU5pY2tuYW1lDQpQYXNzd29ydD1Hb29nbGVQYXNzd29ydA0KbGFzdCBtb2RpZmllZD0wOC4wMi4yMDEzDQoNCltQbGF5c3RhdGlvbiBOZXR3b3JrXQ0KQWRyZXNzZT1odHRwczovL2FjY291bnQuc29ueWVudGVydGFpbm1lbnRuZXR3b3JrLmNvbS9sb2dpbi5hY3Rpb24NClVzZXJuYW1lPVBTTiBOaWNrbmFtZQ0KUGFzc3dvcnQ9UFNOIFBhc3N3b3J0DQpsYXN0IG1vZGlmaWVkPTA4LjA1LjIwMTMNCg0KW0VtYWlsXQ0KQWRyZXNzZT1odHRwczovL3d3dy53ZWIuZGUvZm0NClVzZXJuYW1lPUVtYWlsIE5pY2sNClBhc3N3b3J0PUVtYWlsIFBhc3MNCmxhc3QgbW9kaWZpZWQ9MDYuMDIuMjAxNA0KDQpbVGVh'
    	$Base64String &= 'bXZpZXdlciBLb250b10NCkFkcmVzc2U9aHR0cHM6Ly9sb2dpbi50ZWFtdmlld2VyLmNvbS8NClVzZXJuYW1lPVRlYW12aWV3ZXIgTmljaw0KUGFzc3dvcnQ9VGVhbXZpZXdlciBQYXNzDQpsYXN0IG1vZGlmaWVkPTA0LjA4LjIwMTQNCg0KW2R1bW15IGJlc2NocmVpYnVuZ10NCkFkcmVzc2U9ZHVtbXkgd2Vic2l0ZSDCtQ0KVXNlcm5hbWU9ZHVtbXkgdXNlciDcDQpQYXNzd29ydD1kdW1teSBwYXNzd29yZCDfDQpsYXN0IG1vZGlmaWVkPWR1bW15IGRhdGU='
    	Local Const $bString = Binary(_WinAPI_Base64Decode($Base64String))
    	If $bSaveBinary Then
    		Local Const $hFile = FileOpen($sSavePath & "\test.ini", 18)
    		If @error Then Return SetError(1, 0, 0)
    		FileWrite($hFile, $bString)
    		FileClose($hFile)
    	EndIf
    	Return $bString
    EndFunc   ;==>_Base64String
    
    
    Func _WinAPI_Base64Decode($sB64String)
    	Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
    	If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
    	Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
    	$aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
    	If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
    	Return DllStructGetData($bBuffer, 1)
    EndFunc   ;==>_WinAPI_Base64Decode
    #EndRegion  ;  funktionierende Funktionen
    Alles anzeigen
  • Variable als INI behandeln?

    • Lottich
    • 17. April 2015 um 08:54

    autoiter: Danke fürs Schlichten, ist aber nicht nötig. Hab mir schon vor Monaten ein dickes Fell bei eBay ersteigert :D

    also hier das Script. Es enthält eine Beispiel ini, so wie sie bei mir aufgebaut ist. unverschlüsselt, aber als DLL getarnt.
    Sie wird bei Scriptausführung im @ScriptDir unter dem Namen test.dll via Base64 erstellt. Wer sich den Code ansieht, wird feststellen, dass KEINE DLL Calls oder ähnliches
    durchgeführt werden. Sie enthält definitiv keine Schadfunktionen. Nach durchlauf des Scripts, wird diese wieder gelöscht, damit kein Datenmüll bei euch bleibt, sofern ihr es testen wollt.

    Hier also das Script:
    AutoIt
    #include <Array.au3>
    #include <String.au3>
    
    
    Global $TheFile = @ScriptDir & "\test.dll" ; Beispielinhalt der fertig entschlüsselten Datei
    If Not FileExists($TheFile) Then _Base64String($TheFile)
    Global $ReadFile = FileRead($TheFile)
    
    
    MsgBox(0, "", $ReadFile) ; Testdarstellung meines INI Beispiels
    
    
    
    
    ; hier die Test INI von Kanashius
    $IniArray = _MemIni_readIni("[General]" & @CRLF & "MainGui_X=-1" & @CRLF & "MainGui_Y=0" & @CRLF & "MainGui_Width=1920" & @CRLF & "MainGui_Height=1090")
    _ArrayDisplay($IniArray, "Meldung 1 - 1/6")
    _ArrayDisplay(_MemIni_getAllChilds($IniArray, "General"), "Meldung 1 - 2/6")
    MsgBox(48, "Meldung 1 - 3/6", _MemIni_getKey($IniArray, "General", "MainGui_Y"))
    _MemIni_iniWrite($IniArray, "General", "MainGui_X", "1234")
    _ArrayDisplay(_MemIni_getAllChilds($IniArray, "General"), "Meldung 1 - 4/6")
    MsgBox(48, "Meldung 1 - 5/6", _MemIni_getKey($IniArray, "General", "MainGui_X"))
    MsgBox(48, "Meldung 1 - 6/6", _MemIni_getStringData($IniArray))
    
    
    
    
    ; hier meine Test INI
    $IniArray = _MemIni_readIni($ReadFile)
    _ArrayDisplay($IniArray, "Meldung 2 - 1/6")
    _ArrayDisplay(_MemIni_getAllChilds($IniArray, "Amazon"), "Meldung 2 - 2/6")
    MsgBox(48, "Meldung 2 - 3/6", _MemIni_getKey($IniArray, "Amazon", "Passwort"))
    _MemIni_iniWrite($IniArray, "Amazon", "Passwort", "neues Passwort")
    _ArrayDisplay(_MemIni_getAllChilds($IniArray, "Amazon"), "Meldung 2 - 4/6")
    MsgBox(48, "Meldung 2 - 5/6", _MemIni_getKey($IniArray, "Amazon", "Passwort"))
    MsgBox(48, "Meldung 2 - 6/6", _MemIni_getStringData($IniArray))
    
    
    
    
    FileDelete($TheFile)
    
    
    
    
    Func _MemIni_readIni($data)
    	Local $ar, $IniArray[0][2], $ar2
    	$ar = StringSplit($data, @CRLF, 1 + 2)
    	For $i = 0 To UBound($ar) - 1 Step 1
    		If $ar[$i] <> "" Then
    			If StringInStr($ar[$i], "[") = 1 And StringInStr($ar[$i], "]", 0, -1) = StringLen($ar[$i]) Then
    				ReDim $IniArray[UBound($IniArray) + 1][2]
    				$IniArray[UBound($IniArray) - 1][0] = _StringBetween($ar[$i], "[", "]")[0]
    			Else
    				If $IniArray[UBound($IniArray) - 1][1] <> "" Then
    					$IniArray[UBound($IniArray) - 1][1] &= "|#-#|"
    				EndIf
    				$IniArray[UBound($IniArray) - 1][1] &= $ar[$i]
    			EndIf
    		EndIf
    	Next
    	For $i = 0 To UBound($IniArray) - 1 Step 1
    		$IniArray[$i][1] = StringSplit($IniArray[$i][1], "|#-#|", 1 + 2)
    		$ar = $IniArray[$i][1]
    		Local $ar3[UBound($ar)][2]
    		For $l = 0 To UBound($ar) - 1 Step 1
    			$ar2 = StringSplit($ar[$l], "=", 1 + 2)
    			$ar3[$l][0] = $ar2[0]
    			$ar3[$l][1] = $ar2[1]
    		Next
    		$IniArray[$i][1] = $ar3
    	Next
    	Return $IniArray
    EndFunc   ;==>_MemIni_readIni
    
    
    
    
    Func _MemIni_getAllChilds($array, $cat)
    	$index = _ArraySearch($array, $cat)
    	If $index <> -1 Then
    		Return $array[$index][1]
    	EndIf
    	SetError(-1, 0, -1)
    EndFunc   ;==>_MemIni_getAllChilds
    
    
    
    
    Func _MemIni_getKey($array, $cat, $key)
    	$index = _ArraySearch($array, $cat)
    	If $index <> -1 Then
    		$array = $array[$index][1]
    		$index = _ArraySearch($array, $key)
    		If $index <> -1 Then
    			Return $array[$index][1]
    		EndIf
    	EndIf
    	SetError(-1, 0, -1)
    EndFunc   ;==>_MemIni_getKey
    
    
    
    
    Func _MemIni_iniWrite(ByRef $array, $cat, $key, $value)
    	$index = _ArraySearch($array, $cat)
    	If $index <> -1 Then
    		$array2 = $array[$index][1]
    		$index = _ArraySearch($array2, $key)
    		If $index <> -1 Then
    			$array2[$index][1] = $value
    		Else
    			ReDim $array2[UBound($array2) + 1][2]
    			$array2[UBound($array2) - 1][0] = $key
    			$array2[UBound($array2) - 1][1] = $value
    		EndIf
    		$array[$index][1] = $array2
    	Else
    		ReDim $array[UBound($array) + 1][3]
    		$array[UBound($array) - 1][0] = $cat
    		$array2 = $array[UBound($array) - 1][1]
    		ReDim $array2[UBound($array2) + 1][2]
    		$array2[UBound($array2) - 1][0] = $key
    		$array2[UBound($array2) - 1][1] = $value
    		$array[$index][1] = $array2
    	EndIf
    EndFunc   ;==>_MemIni_iniWrite
    
    
    
    
    Func _MemIni_getStringData($array)
    	$string = ""
    	For $i = 0 To UBound($array) - 1 Step 1
    		$string &= "[" & $array[$i][0] & "]" & @CRLF
    		$ar = $array[$i][1]
    		For $i = 0 To UBound($ar) - 1 Step 1
    			$string &= $ar[$i][0] & "="
    			$string &= $ar[$i][1] & @CRLF
    		Next
    	Next
    	Return $string
    EndFunc   ;==>_MemIni_getStringData
    
    
    ; ================= BASE 64 =================
    Func _Base64String($bSaveBinary = False, $sSavePath = @ScriptDir)
    	Local $Base64String
    	$Base64String &= 'W0F1ZGlibGVdDQpBZHJlc3NlPWh0dHBzOi8vd3d3LmF1ZGlibGUuZGUvc2lnbi1pbg0KVXNlcm5hbWU9QXVkaWJsZU5pY2tuYW1lDQpQYXNzd29ydD1BdWRpYmxlUGFzc3dvcnQNCmxhc3QgbW9kaWZpZWQ9MTMuMDYuMjAxMg0KDQpbQXV0b0l0XQ0KQWRyZXNzZT1odHRwczovL2F1dG9pdC5kZS9pbmRleC5waHAvTG9naW4NClVzZXJuYW1lPUF1dG9JdE5pY2tuYW1lDQpQYXNzd29ydD1BdXRvSXRQYXNzd29ydA0KbGFzdCBtb2RpZmllZD0wNy4wNi4yMDE0DQoNCltnbXguZGVdDQpBZHJlc3NlPWh0dHBzOi8vd3d3LmdteC5kZQ0KVXNlcm5hbWU9R214Tmlja25hbWUNClBhc3N3b3J0PUdteFBhc3N3b3J0DQpsYXN0IG1vZGlmaWVkPTEyLjExLjIwMTQNCg0KW0FtYXpvbl0NCkFkcmVzc2U9aHR0cHM6Ly93d3cuYW1hem9uLmRlL3NpZ24taW4NClVzZXJuYW1lPUFtYXpvbk5pY2tuYW1lDQpQYXNzd29ydD1BbWF6b25QYXNzd29ydA0KbGFzdCBtb2RpZmllZD0yMC4wNi4yMDEyDQoNCltCZWNrZXIgTmF2aWdhdGlvbl0NCkFkcmVzc2U9aHR0cDovL3Nob3AubW9iaWxlbmF2aWdhdGlvbi5teWJlY2tlci5jb20vaW5kZXgucGhwPw0KVXNlcm5hbWU9QmVja2VyTmlja25hbWUNClBhc3N3b3J0PUJlY2tlclBhc3N3b3J0DQpsYXN0IG1vZGlmaWVkPTIyLjA2LjIwMTINCg0KWzEgdW5kIDEgTG9naW5dDQpBZHJlc3NlPWh0dHA6Ly93d3cuMXVuZDEuZGUvbG9naW4NClVzZXJuYW1lPTF1bmQxTmlja25hbWUNClBhc3N3b3J0PTF1bmQxUGFzc3dvcnQNCmxhc3QgbW9kaWZpZWQ9MDIuMTAuMjAxMg0KDQpbUGF5UGFsXQ0KQWRyZXNzZT1odHRwczovL3d3dy5wYXlwYWwuY29tL2RlL2NnaS1iaW4vd2Vic2NyP2NtZD1fbG9naW4tcnVuDQpVc2VybmFtZT1QYXlQYWxOaWNrbmFtZQ0KUGFzc3dvcnQ9UGF5UGFsUGFzc3dvcnQNCmxhc3QgbW9kaWZpZWQ9MjkuMDQuMjAxNQ0KDQpbT3JpZ2luIChFQSldDQpBZHJlc3NlPWh0dHBzOi8vY29ubmVjdC5vcmlnaW4uY29tL2RlL2xvZ2luDQpVc2VybmFtZT1PcmlnaW5OaWNrbmFtZQ0KUGFzc3dvcnQ9T3JpZ2luUGFzc3dvcnQNCmxhc3QgbW9kaWZpZWQ9MDguMDIuMjAxMw0KDQpbR29vZ2xlIHBsYXldDQpBZHJlc3NlPWh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9TZXJ2aWNlTG9naW4NClVzZXJuYW1lPUdvb2dsZU5pY2tuYW1lDQpQYXNzd29ydD1Hb29nbGVQYXNzd29ydA0KbGFzdCBtb2RpZmllZD0wOC4wMi4yMDEzDQoNCltQbGF5c3RhdGlvbiBOZXR3b3JrXQ0KQWRyZXNzZT1odHRwczovL2FjY291bnQuc29ueWVudGVydGFpbm1lbnRuZXR3b3JrLmNvbS9sb2dpbi5hY3Rpb24NClVzZXJuYW1lPVBTTiBOaWNrbmFtZQ0KUGFzc3dvcnQ9UFNOIFBhc3N3b3J0DQpsYXN0IG1vZGlmaWVkPTA4LjA1LjIwMTMNCg0KW0VtYWlsXQ0KQWRyZXNzZT1odHRwczovL3d3dy53ZWIuZGUvZm0NClVzZXJuYW1lPUVtYWlsIE5pY2sNClBhc3N3b3J0PUVtYWlsIFBhc3MNCmxhc3QgbW9kaWZpZWQ9MDYuMDIuMjAxNA0KDQpbVGVh'
    	$Base64String &= 'bXZpZXdlciBLb250b10NCkFkcmVzc2U9aHR0cHM6Ly9sb2dpbi50ZWFtdmlld2VyLmNvbS8NClVzZXJuYW1lPVRlYW12aWV3ZXIgTmljaw0KUGFzc3dvcnQ9VGVhbXZpZXdlciBQYXNzDQpsYXN0IG1vZGlmaWVkPTA0LjA4LjIwMTQNCg0KW2R1bW15IGJlc2NocmVpYnVuZ10NCkFkcmVzc2U9ZHVtbXkgd2Vic2l0ZSDCtQ0KVXNlcm5hbWU9ZHVtbXkgdXNlciDcDQpQYXNzd29ydD1kdW1teSBwYXNzd29yZCDfDQpsYXN0IG1vZGlmaWVkPWR1bW15IGRhdGU='
    	Local Const $bString = Binary(_WinAPI_Base64Decode($Base64String))
    	If $bSaveBinary Then
    		Local Const $hFile = FileOpen($sSavePath & "\test.dll", 18)
    		If @error Then Return SetError(1, 0, 0)
    		FileWrite($hFile, $bString)
    		FileClose($hFile)
    	EndIf
    	Return $bString
    EndFunc   ;==>_Base64String
    
    
    Func _WinAPI_Base64Decode($sB64String)
    	Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0)
    	If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "")
    	Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]")
    	$aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0)
    	If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "")
    	Return DllStructGetData($bBuffer, 1)
    EndFunc   ;==>_WinAPI_Base64Decode
    Alles anzeigen

    Edit 1: Mein Aufbau der INI war fehlerhaft. Deshalb haben einige Funktionen nicht geklappt. Ich hatte, der Optik wegen, die = Zeichen so gesetzt, dass sie eine gerade Linie nach unten bildeten. Deshalb waren offenbar zuviele Leerzeichen oder @TAB zwischen dem Schlüssel und dem = Zeichen. Nachdem ich das geändert hab funktioniert nun fast alles.
    Die letzte Funktion _MemIni_getStringData() wird nicht beendet bzw scheint zu hängen und _MemIni_iniWrite() ändert den Wert nicht.

    Edit 2: Nach gut 190 Sekunden bricht AutoIt das Script ab mit der Fehlermeldung: "Error allocating memory", da hängt es dann in der Funktion _MemIni_getStringData() fest.

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™