#include <GuiConstants.au3>
#include <GuiListView.au3>
#cs
	============================= OBJEKT 'Scripting.Dictionary' =======================================
	*** Funktionssammlung ***
	
	_ObjDictCreate(Modus)
	Erzeugt ein Dictionary Objekt im Binär- (default) oder Textmodus
	Gibt das Handle des Objektes zurück
	
	_ObjDictAdd(Objekt, Schlüssel, Wert)
	Fügt einem Dictionary Objekt ein Schlüssel-Wert Paar hinzu
	
	_ObjDictGetValue(Objekt, Schlüssel)
	Liest den Wert für einen Schlüssel aus
	
	_ObjDictSetValue(Objekt, Schlüssel)
	Setzt einen neuen Wert für einen Schlüssel
	
	_ObjDictCount(Objekt)
	Gibt die Anzahl der Schlüssel-Wert Paare zurück
	
	_ObjDictSearch(Objekt, Schlüssel)
	Prüft ob der Schlüssel existiert, liefert 'TRUE' wenn gefunden
	
	_ObjDictDeleteKey(Objekt, Schlüssel)
	Löscht den angegebenen Schlüssel (und dessen Wert)
	Wird statt eines Schlüsselnamens '' übergeben,
	werden alle Schlüssel gelöscht (Standard)
	
	_ObjDictList(Objekt)
	Eine GUI mit einem ListView zeigt alle Schlüssel-Wert Paare
	
	_IniReadSectionToObjDict(Objekt, INI-Pfad, Sektion)
	Liest die angegebene INI-Sektion in das Objekt
	Gibt die Anzahl der gelesenen Schlüssel-Wert Paare zurück
	
	_IniWriteSectionFromObjDict(Objekt, INI-Pfad, Sektion)
	Schreibt die Schlüssel-Wert Paare des Objekts in die angegebene Sektion
	der INI-Datei
	Gibt die Anzahl der geschriebenen Schlüssel-Wert Paare zurück
	
	_FileReadToObjDict(Objekt, TextDatei-Pfad, Seperator)
	Liest aus einer Textdatei alle Schlüssel-Wert Paare zeilenweise ein (1 Paar/Zeile)
	Standard-Seperator ist '|', kann hier angepaßt werden
	Gibt die Anzahl der gelesenen Schlüssel-Wert Paare zurück
	
	_FileWriteFromObjDict(Objekt, TextDatei-Pfad, Seperator, Overwrite)
	Schreibt die Schlüssel-Wert Paare des Objekts in die angegebene Datei (1 Paar/Zeile).
	Mit Overwrite='TRUE' (Standard) wird die angegebene Datei, falls sie bereits existiert,
	überschrieben. Mit 'FALSE' wird an eine bestehende Datei angehängt.
	Standard-Seperator ist '|', kann hier angepaßt werden.
	Gibt die Anzahl der geschriebenen Schlüssel-Wert Paare zurück
	
	Autor: BugFix	( bugfix@autoit.de )
	
	===================================================================================================
#ce
;==================================================================================================
; Name:      _ObjDictCreate([$MODE=0])
; Parameter: $MODE
;                  0 Binär (default)
;                  1 Text
; Return:    Erfolg:   Objekt Handle
;            Fehler:  -1, @Error=1   Objekt konnte nicht erstellt werden
;==================================================================================================
Func _ObjDictCreate($MODE = 0)
	$oDICT = ObjCreate('Scripting.Dictionary')
	If Not IsObj($oDICT) Then Return SetError(1, 0, -1)
	If $MODE <> 0 Then $oDICT.CompareMode = 1
	Return $oDICT
EndFunc   ;==>_ObjDictCreate

;==================================================================================================
; Name:      _ObjDictAdd($oDICT, $KEY, $VALUE)
; Parameter: $oDICT - Handle des Dictionary-Objektes
;            $KEY   - Schlüssel
;            $VALUE - Wert; speichert Leerstring, wenn nicht übergeben
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Schlüssel ohne Inhalt übergeben
;                      4  Schlüssel bereits vorhanden
;                      6  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjDictAdd(ByRef $oDICT, $KEY, $VALUE = '')
	If Not IsObj($oDICT) Then
		Return SetError(1, 0, -1)
	ElseIf $KEY = '' Then
		Return SetError(2, 0, -1)
	ElseIf $oDICT.Exists($KEY) Then
		Return SetError(4, 0, -1)
	EndIf
	$oDICT.Add($KEY, $VALUE)
	If @error Then Return SetError(6, 0, -1)
	Return 0
EndFunc   ;==>_ObjDictAdd

;==================================================================================================
; Name:      _ObjDictGetValue($oDICT, $KEY)
; Parameter: $oDICT - Handle des Dictionary-Objektes
;            $KEY   - Schlüssel
; Return:    Erfolg:  Wert des Schlüssels
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Schlüssel ohne Inhalt übergeben
;                      5  Schlüssel nicht vorhanden
;==================================================================================================
Func _ObjDictGetValue(ByRef $oDICT, $KEY = '')
	If Not IsObj($oDICT) Then
		Return SetError(1, 0, -1)
	ElseIf $KEY = '' Then
		Return SetError(2, 0, -1)
	ElseIf Not $oDICT.Exists($KEY) Then
		Return SetError(5, 0, -1)
	EndIf
	Return $oDICT.Item($KEY)
EndFunc   ;==>_ObjDictGetValue

;==================================================================================================
; Name:      _ObjDictSetValue($oDICT, $KEY, $VALUE)
; Parameter: $oDICT - Handle des Dictionary-Objektes
;            $KEY   - Schlüssel
;            $VALUE - Wert
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Schlüssel ohne Inhalt übergeben
;                      3  Wert hat keinen Inhalt
;                      5  Schlüssel nicht vorhanden
;==================================================================================================
Func _ObjDictSetValue(ByRef $oDICT, $KEY = '', $VALUE = '')
	If Not IsObj($oDICT) Then
		Return SetError(1, 0, -1)
	ElseIf $KEY = '' Then
		Return SetError(2, 0, -1)
	ElseIf $VALUE = '' Then
		Return SetError(3, 0, -1)
	ElseIf Not $oDICT.Exists($KEY) Then
		Return SetError(5, 0, -1)
	EndIf
	$oDICT.Item($KEY) = $VALUE
	Return 0
EndFunc   ;==>_ObjDictSetValue

;==================================================================================================
; Name:      _ObjDictCount($oDICT)
; Parameter: $oDICT - Handle des Dictionary-Objektes
; Return:    Erfolg:  Anzahl der Schlüssel-Wert Paare
;            Fehler:   -1
;        Fehlerwert:   1  Objekt existiert nicht
;==================================================================================================
Func _ObjDictCount(ByRef $oDICT)
	If Not IsObj($oDICT) Then
		Return SetError(1, 0, -1)
	EndIf
	Return $oDICT.Count
EndFunc   ;==>_ObjDictCount

;==================================================================================================
; Name:      _ObjDictSearch($oDICT, $KEY)
; Parameter: $oDICT - Handle des Dictionary-Objektes
;            $KEY   - Schlüssel
; Return:    Erfolg:  TRUE    Schlüssel vorhanden
;                     FALSE   Schlüssel nicht vorhanden
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Schlüssel ohne Inhalt übergeben
;==================================================================================================
Func _ObjDictSearch(ByRef $oDICT, $KEY)
	If Not IsObj($oDICT) Then
		Return SetError(1, 0, -1)
	ElseIf $KEY = '' Then
		Return SetError(2, 0, -1)
	ElseIf Not $oDICT.Exists($KEY) Then
		Return False
	Else
		Return True
	EndIf
EndFunc   ;==>_ObjDictSearch

;==================================================================================================
; Name:      _ObjDictDeleteKey($oDICT [, $KEY=''])
; Parameter: $oDICT - Handle des Dictionary-Objektes
;            $KEY   - Schlüssel (default='')
;                     mit $KEY = '' werden alle Schlüssel gelöscht
; Return:    Erfolg:   0
;            Fehler:  -1  @Error=5  Objekt existiert nicht
;                         @Error=6  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjDictDeleteKey(ByRef $oDICT, $KEY = '')
	If Not IsObj($oDICT) Then
		Return SetError(1, 0, -1)
	EndIf
	If $KEY = '' Then
		$oDICT.RemoveAll
		If @error Then
			Return SetError(6, 0, -1)
		Else
			Return 0
		EndIf
	ElseIf Not $oDICT.Exists($KEY) Then
		Return SetError(5, 0, -1)
	EndIf
	$oDICT.Remove($KEY)
	If @error Then Return SetError(6, 0, -1)
	Return 0
EndFunc   ;==>_ObjDictDeleteKey

;==================================================================================================
; Name:      _ObjDictList($oDICT [, $TITLE='Elemente: Objekt Dictionary'])
; Parameter: $oDICT - Handle des Dictionary-Objektes
;            $TITLE - Fenstertitel (optional)
; Return:    Erfolg:   GUI mit ListView
;            Fehler:  -1  @Error=1  Objekt existiert nicht
; Requirements:       #include <GuiConstants.au3>
;                     #include <GuiListView.au3>
;==================================================================================================
Func _ObjDictList(ByRef $oDICT, $TITLE = 'Elemente: Objekt Dictionary')
	If Not IsObj($oDICT) Then Return SetError(1, 0, -1)
	Local $count = $oDICT.Count
	Local $SaveMode = Opt("GUIOnEventMode", 0), $ListGUI, $oDictLV, $btnClose, $msg
	$ListGUI = GUICreate($TITLE, 600, 400, (@DesktopWidth - 600) / 2, (@DesktopHeight - 400) / 2)
	$btnClose = GUICtrlCreateButton('&Ende', 40, 360, 70, 22)
	GUICtrlSetResizing($btnClose, BitOR($GUI_DockRight, $GUI_DockBottom, $GUI_DockSize))
	GUICtrlDelete($oDictLV)
	$oDictLV = GUICtrlCreateListView('Schlüssel|Wert', 10, 10, 580, 340, BitOR($LVS_SHOWSELALWAYS, _
			$LVS_EDITLABELS), BitOR($LVS_EX_GRIDLINES, $LVS_EX_HEADERDRAGDROP, $LVS_EX_FULLROWSELECT, $LVS_EX_REGIONAL))
	If $count > 0 Then
		Local $strKey, $colKeys = $oDICT.Keys
		For $strKey In $colKeys
			GUICtrlCreateListViewItem($strKey & '|' & $oDICT.Item($strKey), $oDictLV)
		Next
	Else
		WinSetTitle($ListGUI, '', 'Das Objekt Dictionary enthält keine Elemente!')
	EndIf
	GUISetState(@SW_SHOW, $ListGUI)
	While 1
		$msg = GUIGetMsg(1)
		If $msg[1] = $ListGUI And _
				($msg[0] = $GUI_EVENT_CLOSE Or $msg[0] = $btnClose) Then ExitLoop
	WEnd
	GUIDelete($ListGUI)
	Opt("GUIOnEventMode", $SaveMode)
EndFunc   ;==>_ObjDictList

;==================================================================================================
; Name:      _IniReadSectionToObjDict($oDICT, $PathINI, $SECTION)
; Parameter: $oDICT   - Handle des Dictionary-Objektes
;            $PathINI - Pfad der INI-Datei
;            $SECTION - Sektion die gelesen werden soll
; Return:    Erfolg:    Anzahl der eingelesenen Schlüssel-Wert Paare
;            Fehler:   -1
;        Fehlerwert:    1  Objekt existiert nicht
;                       6  INI-Pfad nicht vorhanden
;                       7  kein Sektionsname
;                       8  INI-Sektion konnte nicht gelesen werden oder leer
;==================================================================================================
Func _IniReadSectionToObjDict(ByRef $oDICT, $PathINI = '', $SECTION = '')
	If Not IsObj($oDICT) Then
		Return SetError(1, 0, -1)
	ElseIf Not FileExists($PathINI) Then
		Return SetError(6, 0, -1)
	ElseIf $SECTION = '' Then
		Return SetError(7, 0, -1)
	EndIf
	Local $arSECTION = IniReadSection($PathINI, $SECTION)
	If Not IsArray($arSECTION) Then Return SetError(8, 0, -1)
	For $i = 1 To $arSECTION[0][0]
		$oDICT.Add($arSECTION[$i][0], $arSECTION[$i][1])
	Next
	Return $arSECTION[0][0]
EndFunc   ;==>_IniReadSectionToObjDict

;==================================================================================================
; Name:      _IniWriteSectionFromObjDict($oDICT, $PathINI, $SECTION)
; Parameter: $oDICT   - Handle des Dictionary-Objektes
;            $PathINI - Pfad der INI-Datei
;            $SECTION - Sektion die gelesen werden soll
; Return:    Erfolg:    Anzahl der geschriebenen Schlüssel-Wert Paare
;            Fehler:   -1
;        Fehlerwert:    1  Objekt existiert nicht
;                       6  INI-Pfad nicht vorhanden
;                       7  kein Sektionsname
;                       9  INI-Sektion konnte nicht geschrieben werden
;==================================================================================================
Func _IniWriteSectionFromObjDict(ByRef $oDICT, $PathINI = '', $SECTION = '')
	If Not IsObj($oDICT) Then
		Return SetError(1, 0, -1)
	ElseIf Not FileExists($PathINI) Then
		Return SetError(6, 0, -1)
	ElseIf $SECTION = '' Then
		Return SetError(7, 0, -1)
	EndIf
	Local $arSECTION[$oDICT.Count][2], $i = 0
	Local $strKey, $colKeys = $oDICT.Keys
	For $strKey In $colKeys
		$arSECTION[$i][0] = $strKey
		$arSECTION[$i][1] = $oDICT.Item($strKey)
		$i += 1
	Next
	If IniWriteSection($PathINI, $SECTION, $arSECTION, 0) = 1 Then
		Return $oDICT.Count
	Else
		Return SetError(9, 0, -1)
	EndIf
EndFunc   ;==>_IniWriteSectionFromObjDict

;==================================================================================================
; Name:      _FileReadToObjDict($oDICT, $PathFile [, $SEPERATOR='|'])
; Parameter: $oDICT     - Handle des Dictionary-Objektes
;            $PathFile  - Pfad der Datei
;            $SEPERATOR - Trennzeichen zwischen Wert u. Schlüssel, Standard: '|'
; Return:    Erfolg:      Anzahl der eingelesenen Schlüssel-Wert Paare
;            Fehler:     -1
;        Fehlerwert:      1  Objekt existiert nicht
;                         6  Datei-Pfad nicht vorhanden
;                         7  Leerstring als Seperator übergeben
;                         8  Datei konnte nicht gelesen werden
;==================================================================================================
Func _FileReadToObjDict(ByRef $oDICT, $PathFile = '', $SEPERATOR = '|')
	If Not IsObj($oDICT) Then
		Return SetError(1, 0, -1)
	ElseIf Not FileExists($PathFile) Then
		Return SetError(6, 0, -1)
	ElseIf $SEPERATOR = '' Then
		Return SetError(7, 0, -1)
	EndIf
	Local $fh = FileOpen($PathFile, 0), $line
	Local $val
	If $fh = -1 Then
		Return SetError(8, 0, -1)
	EndIf
	While 1
		$line = FileReadLine($fh)
		If @error = -1 Then ExitLoop
		$val = StringSplit($line, $SEPERATOR)
		If $val[0] > 1 Then
			$oDICT.Add($val[1], $val[2])
		EndIf
	WEnd
	FileClose($fh)
	Return $oDICT.Count
EndFunc   ;==>_FileReadToObjDict

;==================================================================================================
; Name:      _FileWriteFromObjDict($oDICT, $PathFile [, $SEPERATOR='|' [, $OVERWRITE=True]])
; Parameter: $oDICT     - Handle des Dictionary-Objektes
;            $PathFile  - Pfad der Datei
;            $SEPERATOR - Trennzeichen zwischen Wert u. Schlüssel, Standard: '|'
;            $OVERWRITE - Falls Datei existiert, wird sie überschrieben (Standard).
;                         Mit 'FALSE' wird an bestehende Datei angehängt.
; Return:    Erfolg:      Anzahl der geschriebenen Schlüssel-Wert Paare
;            Fehler:     -1
;        Fehlerwert:      1  Objekt existiert nicht
;                         7  Leerstring als Seperator übergeben
;                         8  Datei konnte nicht geschrieben werden
;==================================================================================================
Func _FileWriteFromObjDict(ByRef $oDICT, $PathFile = '', $SEPERATOR = '|', $OVERWRITE = True)
	If Not IsObj($oDICT) Then
		Return SetError(1, 0, -1)
	ElseIf $PathFile = '' Then
		Return SetError(6, 0, -1)
	ElseIf $SEPERATOR = '' Then
		Return SetError(7, 0, -1)
	EndIf
	If $OVERWRITE Then
		Local $fh = FileOpen($PathFile, 34)
	Else
		Local $fh = FileOpen($PathFile, 33)
	EndIf
	Local $strKey, $colKeys = $oDICT.Keys
	For $strKey In $colKeys
		FileWriteLine($fh, $strKey & $SEPERATOR & $oDICT.Item($strKey))
		If @error Then
			Return SetError(8, 0, -1)
		EndIf
	Next
	FileClose($fh)
	Return $oDICT.Count
EndFunc   ;==>_FileWriteFromObjDict

#cs
	Die folgenden Funktionen entstanden Dank der guten Vorarbeit von AspirinJunkie :ThumbsUp:
	Ebenso habe ich Konvertierungsfunktionen von ihm mit eingebunden.
	
	Zum Ausführen der Funktionen ist NET-Framework erforderlich.
	
	Mit der Funktion
	"_ObjGetType($Object)"
	kann die exakte Objektbezeichnung der verwendeten NET-Framework Objekte abgefragt werden.
#ce
;==================================================================================================
; Name:      _ObjGetType(Objekt NET Framework)
; Return:    Erfolg:   String mit der genauen Objektbezeichnung
;            Fehler:  -1, @Error=1   Objekt existiert nicht
;==================================================================================================
Func _ObjGetType($Object)
	If Not IsObj($Object) Then Return SetError(1, 0, -1)
	Return $Object.ToString
EndFunc   ;==>_ObjGetType

#cs
	======================== OBJEKT 'System.Collections.Hashtable' ====================================
	*** Funktionssammlung ***
	
	_ObjHashCreate()
	Erzeugt ein Hashtable Objekt
	Gibt das Handle des Objektes zurück
	
	_ObjHashAdd(Objekt, Schlüssel, Wert)
	Fügt einem Hashtable Objekt ein Schlüssel-Wert Paar hinzu
	
	_ObjHashGetValue(Objekt, Schlüssel)
	Liest den Wert für einen Schlüssel aus
	
	_ObjHashCount(Objekt)
	Gibt die Anzahl der Schlüssel-Wert Paare zurück
	
	_ObjHashSearch(Objekt, Schlüssel)
	Prüft ob der Schlüssel existiert, liefert 'TRUE' wenn gefunden
	
	_ObjHashDeleteKey(Objekt, Schlüssel)
	Löscht den angegebenen Schlüssel (und dessen Wert)
	Wird statt eines Schlüsselnamens '' übergeben,
	werden alle Schlüssel gelöscht (Standard)
	
	Autor: BugFix	( bugfix@autoit.de )
	
	===================================================================================================
#ce
;==================================================================================================
; Name:      _ObjHashCreate()
; Return:    Erfolg:   Objekt Handle
;            Fehler:  -1, @Error=1   Objekt konnte nicht erstellt werden
;==================================================================================================
Func _ObjHashCreate()
	Local $obj = ObjCreate("System.Collections.Hashtable")
	If (Not IsObj($obj)) Then
		Return SetError(1, 0, -1)
	Else
		Return $obj
	EndIf
EndFunc   ;==>_ObjHashCreate

;==================================================================================================
; Name:      _ObjHashAdd($ObjHash, $Key, $Value)
; Parameter: $ObjHash  - Handle des Hash-Objektes
;            $Key      - Schlüssel
;            $Value    - Wert
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Schlüssel ohne Inhalt übergeben
;                      3  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjHashAdd(ByRef $ObjHash, $KEY = '', $VALUE = '')
	If (Not IsObj($ObjHash)) Then Return SetError(1, 0, -1)
	If $KEY = '' Then Return SetError(2, 0, -1)
	$ObjHash.Add($KEY, $VALUE)
	If @error Then Return SetError(3, 0, -1)
	Return 0
EndFunc   ;==>_ObjHashAdd

;==================================================================================================
; Name:      _ObjHashGetValue($ObjHash, $Key)
; Parameter: $ObjHash  - Handle des Hash-Objektes
;            $Key      - Schlüssel
; Return:    Erfolg:   Wert des übergebenen Schlüssels
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Schlüssel ohne Inhalt übergeben
;                      5  Schlüssel nicht vorhanden
;==================================================================================================
Func _ObjHashGetValue(ByRef $ObjHash, $KEY = '')
	If (Not IsObj($ObjHash)) Then Return SetError(1, 0, -1)
	If $KEY = '' Then Return SetError(2, 0, -1)
	If $ObjHash.Contains($KEY) Then
		Return $ObjHash($KEY)
	Else
		Return SetError(5, 0, -1)
	EndIf
EndFunc   ;==>_ObjHashGetValue

;==================================================================================================
; Name:      _ObjHashCount($ObjHash)
; Parameter: $ObjHash  - Handle des Hash-Objektes
; Return:    Erfolg:   Anzahl der Schlüssel/Wert-Paare
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;==================================================================================================
Func _ObjHashCount(ByRef $ObjHash)
	If (Not IsObj($ObjHash)) Then Return SetError(1, 0, -1)
	Return $ObjHash.Count
EndFunc   ;==>_ObjHashCount

;==================================================================================================
; Name:      _ObjHashSearch($ObjHash, $Key)
; Parameter: $ObjHash  - Handle des Hash-Objektes
;            $Key      - Schlüssel auf dessen Existenz geprüft wird
; Return:    Erfolg:   TRUE  Schlüssel vorhanden
;                      FALSE Schlüssel nicht vorhanden
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Schlüssel ohne Inhalt übergeben
;==================================================================================================
Func _ObjHashSearch(ByRef $ObjHash, $KEY = '')
	If (Not IsObj($ObjHash)) Then Return SetError(1, 0, -1)
	If $KEY = '' Then Return SetError(2, 0, -1)
	If $ObjHash.Contains($KEY) Then
		Return True
	Else
		Return False
	EndIf
EndFunc   ;==>_ObjHashSearch

;==================================================================================================
; Name:      _ObjHashDeleteKey($ObjHash, $Key)
; Parameter: $ObjHash  - Handle des Hash-Objektes
;            $Key      - Schlüssel; Leerstring (Standard) löscht alle Einträge
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      3  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjHashDeleteKey(ByRef $ObjHash, $KEY = '')
	If (Not IsObj($ObjHash)) Then Return SetError(1, 0, -1)
	If $KEY = '' Then
		$ObjHash.Clear
		If @error Then Return SetError(3, 0, -1)
	Else
		$ObjHash.Remove($KEY)
		If @error Then Return SetError(3, 0, -1)
	EndIf
	Return 0
EndFunc   ;==>_ObjHashDeleteKey


#cs
	=========================== OBJEKT 'System.Collections.ArrayList' =================================
	*** Funktionssammlung ***
	
	_ObjAListCreate()
	Erzeugt ein Arraylist-Objekt
	
	_ObjAListAdd(Objekt, Wert)
	Fügt einen Wert zum Arraylist-Objekt hinzu
	
	_ObjAListSort(Objekt, Richtung)
	Sortiert alle Elemente des Objekts (Standard: aufsteigend)
	
	_ObjAListToLine(Objekt, Trennzeichen)
	Gibt einen String mit allen Elementen, getrennt durch Trennzeichen (Standard '|'), zurück
	
	_ObjAListGetItem(Objekt, Index)
	Gibt den Inhalt an der Indexposition zurück
	
	_ObjAListDelByName(Objekt, Wert)
	Löscht den ersten gefundenen Eintrag, der mit Wert übereinstimmt
	
	_ObjAListDelByIndex(Objekt, Index)
	Löscht den Eintrag am übergebenen Index
	
	_ObjAListInsert(Objekt, Wert, Index)
	Fügt einen Wert am gegebenen Index ein
	
	_ObjAListCount(Objekt)
	Gibt die Anzahl der Elemente im Objekt zurück
	
	_ObjAListSearch(Objekt, Wert)
	Gibt TRUE zurück, wenn Wert im Objekt enthalten, sonst FALSE
	
	_ObjAListClear(Objekt)
	Löscht alle Elemente aus der Arrayliste
	
	_ObjAListAddRange(Objekt Arraylist, Objekt das hinzugefügt werden soll)
	Fügt ein (gleichartiges) Objekt an die Arraylist an
	
	_ObjAListToArray(Objekt)
	Übergibt alle Elemente der Arraylist an ein 1D-Array
	
	_ObjAListGetIndex(Objekt, Wert)
	Gibt den Index des ersten gefundenen Eintrags zurück, der mit Wert übereinstimmt
	
	_ObjAListGetRange(Objekt, Index, Anzahl)
	Gibt ab Indexposition eine Anzahl Elemente als Objekt zurück
	
	_ObjAListInsertRange(Objekt, EinfügeObjekt, Index)
	Fügt an der Indexposition ein (gleichartiges) Objekt ein
	
	_ObjAListLastIndexOf(Objekt, Wert, Von, Bis)
	Gibt den nullbasierten Index des letzten Vorkommens eines Werts in der ArrayList bzw. in einem Abschnitt davon zurück.
	
	_ObjAListRemoveRange(Objekt, Index, Anzahl)
	Löscht eine Anzahl Elemente ab Indexposition
	Wird keine Anzahl übergeben, werden ab Indexposition alle restlichen Elemente gelöscht
	
	_ObjAListReverse(Objekt, Von, Bis)
	Kehrt die Reihenfolge der Elemente im angegebenen Bereich um.
	
	_ObjAListSetRange(Objekt, EinfügeObjekt, Index)
	Kopiert die Elemente einer Auflistung (gleichartiges Objekt) über einen Bereich von Elementen in der ArrayList.
	
	===================================================================================================
#ce
;==================================================================================================
; Name:      _ObjAListCreate()
; Return:    Erfolg:   Handle des Arraylist-Objektes
;            Fehler:  -1
;        Fehlerwert:   1  Objekt konnte nicht erzeugt werden
;==================================================================================================
Func _ObjAListCreate()
	Local $obj = ObjCreate("System.Collections.ArrayList")
	If (Not IsObj($obj)) Then
		Return SetError(1, 0, -1)
	Else
		Return $obj
	EndIf
EndFunc   ;==>_ObjAListCreate

;==================================================================================================
; Name:      _ObjAListAdd($ObjList, $Value)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
;            $Value    - Wert
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Wert ohne Inhalt übergeben
;                      3  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjAListAdd(ByRef $ObjList, $VALUE = '')
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	If $VALUE = '' Then Return SetError(2, 0, -1)
	$ObjList.Add($VALUE)
	If @error Then Return SetError(3, 0, -1)
	Return 0
EndFunc   ;==>_ObjAListAdd

;==================================================================================================
; Name:      _ObjAListSort($ObjList, $Direction)
; Parameter: $ObjList   - Handle des Arraylist-Objektes
;            $Direction - Sortierrichtung; 0=steigend (Standard), 1=fallend
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      3  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjAListSort(ByRef $ObjList, $Direction = 0)
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	$ObjList.Sort
	If @error Then Return SetError(3, 0, -1)
	If $Direction = 1 Then $ObjList.Reverse
	If @error Then Return SetError(3, 0, -1)
	Return 0
EndFunc   ;==>_ObjAListSort

;==================================================================================================
; Name:      _ObjAListToStr($ObjList, $Delim)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
;            $Delim    - Trennzeichen; Standard: '|'
; Return:    Erfolg:   String aller Elemente mit Trennzeichen unterbrochen
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;==================================================================================================
Func _ObjAListToStr(ByRef $ObjList, $Delim = '|')
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	Local $element, $out = ''
	For $element In $ObjList
		$out &= $element & $Delim
	Next
	Return StringTrimRight($out, 1)
EndFunc   ;==>_ObjAListToStr

;==================================================================================================
; Name:      _ObjAListGetItem($ObjList, $Index)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
;            $Index    - Index des zurückzugebenden Wertes
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      4  Index außerhalb Bereich
;==================================================================================================
Func _ObjAListGetItem(ByRef $ObjList, $Index)
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	If ($Index = -1) Or ($Index > $ObjList.Count - 1) Then Return SetError(4, 0, -1)
	Return $ObjList.Item($Index)
EndFunc   ;==>_ObjAListGetItem

;==================================================================================================
; Name:      _ObjAListDelByName($ObjList, $Value)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
;            $Value    - Wert der gelöscht werden soll
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Wert ohne Inhalt übergeben
;                      3  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjAListDelByName(ByRef $ObjList, $VALUE = '')
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	If $VALUE = '' Then Return SetError(2, 0, -1)
	$ObjList.Remove($VALUE)
	If @error Then Return SetError(3, 0, -1)
	Return 0
EndFunc   ;==>_ObjAListDelByName

;==================================================================================================
; Name:      _ObjAListDelByIndex($ObjList, $Index)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
;            $Index    - Index des zu löschenden Wertes
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      3  Aktion fehlgeschlagen
;                      4  Index außerhalb Bereich
;==================================================================================================
Func _ObjAListDelByIndex(ByRef $ObjList, $Index = -1)
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	If ($Index = -1) Or ($Index > $ObjList.Count - 1) Then Return SetError(4, 0, -1)
	$ObjList.RemoveAt($Index)
	If @error Then Return SetError(3, 0, -1)
	Return 0
EndFunc   ;==>_ObjAListDelByIndex

;==================================================================================================
; Name:      _ObjAListInsert($ObjList, $Value, $Index)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
;            $Value    - Wert der eingefügt werden soll
;            $Index    - Index an dem eingefügt werden soll
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Wert ohne Inhalt übergeben
;                      3  Aktion fehlgeschlagen
;                      4  Index außerhalb Bereich
;==================================================================================================
Func _ObjAListInsert(ByRef $ObjList, $VALUE = '', $Index = -1)
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	If $VALUE = '' Then Return SetError(2, 0, -1)
	If $Index = -1 Then
		$ObjList.Add($VALUE)
		If @error Then Return SetError(3, 0, -1)
	Else
		If $Index > $ObjList.Count - 1 Then Return SetError(4, 0, -1)
		$ObjList.Insert($Index, $VALUE)
		If @error Then Return SetError(3, 0, -1)
	EndIf
	Return 0
EndFunc   ;==>_ObjAListInsert

;==================================================================================================
; Name:      _ObjAListCount($ObjList)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
; Return:    Erfolg:   Anzahl der Arraylist-Elemente
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;==================================================================================================
Func _ObjAListCount(ByRef $ObjList)
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	Return $ObjList.Count
EndFunc   ;==>_ObjAListCount

;==================================================================================================
; Name:      _ObjAListSearch($ObjList, $Value)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
;            $Value    - Wert auf dessen Existenz geprüft wird
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Wert ohne Inhalt übergeben
;                      3  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjAListSearch(ByRef $ObjList, $VALUE = '')
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	If $VALUE = '' Then Return SetError(2, 0, -1)
	If $ObjList.Contains($VALUE) Then
		Return True
	Else
		Return False
	EndIf
	If @error Then Return SetError(3, 0, -1)
EndFunc   ;==>_ObjAListSearch

;==================================================================================================
; Name:      _ObjAListClear($ObjList)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      3  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjAListClear(ByRef $ObjList)
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	$ObjList.Clear
	If @error Then Return SetError(3, 0, -1)
	Return 0
EndFunc   ;==>_ObjAListClear

;==================================================================================================
; Name:      _ObjAListAddRange($ObjList, $ObjRange)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
;            $ObjRange - Handle des anzufügenden (gleichartigen) Objektes
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Objekt Range existiert nicht
;                      3  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjAListAddRange(ByRef $ObjList, ByRef $ObjRange)
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	If (Not IsObj($ObjRange)) Then Return SetError(2, 0, -1)
	$ObjList.AddRange($ObjRange)
	If @error Then Return SetError(3, 0, -1)
	Return 0
EndFunc   ;==>_ObjAListAddRange

;==================================================================================================
; Name:      _ObjAListToArray($ObjList)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
; Return:    Erfolg:   1D-Array mit allen Elementen der Arraylist
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      3  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjAListToArray(ByRef $ObjList)
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	Local $Array = $ObjList.ToArray
	If @error Then Return SetError(3, 0, -1)
	Return $Array
EndFunc   ;==>_ObjAListToArray

;==================================================================================================
; Name:      _ObjAListGetIndex($ObjList, $Value)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
;            $Value    - Wert dessen Index gesucht wird
; Return:    Erfolg:   Index des übergebenen Wertes
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Wert ohne Inhalt übergeben
;                      3  Aktion fehlgeschlagen, kein Element entspricht Wert
;==================================================================================================
Func _ObjAListGetIndex(ByRef $ObjList, $VALUE = '')
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	If $VALUE = '' Then Return SetError(2, 0, -1)
	Local $element, $i = 0
	For $element In $ObjList
		If $element = $VALUE Then Return $i
		$i += 1
	Next
	Return SetError(3, 0, -1)
EndFunc   ;==>_ObjAListGetIndex

;==================================================================================================
; Name:      _ObjAListGetRange($ObjList, $From, $Count)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
;            $From     - Wert
;            $Count    - Index
; Return:    Erfolg:   Ein Objekt mit den Elementen des Bereichs
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      4  Index außerhalb Bereich
;==================================================================================================
Func _ObjAListGetRange(ByRef $ObjList, $From = 0, $count = -1)
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	Local $maxIndx = $ObjList.Count - 1
	If $count = -1 Then $count = $maxIndx - $From
	If ($From < 0) Or ($From + $count > $maxIndx) Or ($From >= $maxIndx) Then Return SetError(4, 0, -1)
	Return $ObjList.GetRange($From, $count)
EndFunc   ;==>_ObjAListGetRange

;==================================================================================================
; Name:      _ObjAListInsertRange($ObjList, $ObjRange, $Index)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
;            $ObjRange - Handle des einzufügenden (gleichartigen) Objektes
;            $Index    - Index an dem eingefügt werden soll
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Objekt Range existiert nicht
;                      3  Aktion fehlgeschlagen
;                      4  Index außerhalb Bereich
;==================================================================================================
Func _ObjAListInsertRange(ByRef $ObjList, ByRef $ObjRange, $Index = 0)
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	If (Not IsObj($ObjRange)) Then Return SetError(2, 0, -1)
	If ($Index < 0) Or ($Index > $ObjList.Count - 1) Then Return SetError(4, 0, -1)
	$ObjList.InsertRange($Index, $ObjRange)
	If @error Then Return SetError(3, 0, -1)
	Return 0
EndFunc   ;==>_ObjAListInsertRange

;==================================================================================================
; Name:      _ObjAListLastIndexOf($ObjList, $Value, $From, $To)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
;            $Value    - Wert, dessen letztes Vorkommen im angegebenen Bereich (Standard: alle Elemente) gesucht wird
;            $From     - StartIndex
;            $To       - EndIndex
; Return:    Erfolg:   Index des letzten Vorkommens von Wert im angegebenen Bereich
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Wert ohne Inhalt übergeben
;                      4  Index außerhalb Bereich
;==================================================================================================
Func _ObjAListLastIndexOf(ByRef $ObjList, $VALUE = '', $From = 0, $To = 'UBound')
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	If $VALUE = '' Then Return SetError(2, 0, -1)
	Local $maxIndx = $ObjList.Count - 1
	If $To = 'UBound'  Then $To = $maxIndx
	If ($From < 0) Or ($To > $maxIndx) Or ($From > $maxIndx) Then Return SetError(4, 0, -1)
	Return $ObjList.LastIndexOf($VALUE, $From, $To)
EndFunc   ;==>_ObjAListLastIndexOf

;==================================================================================================
; Name:      _ObjAListRemoveRange($ObjList, $From, $Count)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
;            $From     - Index ab dem gelöscht werden soll
;            $Count    - Anzahl der zu löschenden Elemente; Standard -1 = alle ab Index
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      3  Aktion fehlgeschlagen
;                      4  Index außerhalb Bereich
;==================================================================================================
Func _ObjAListRemoveRange(ByRef $ObjList, $From = 0, $count = -1)
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	Local $maxIndx = $ObjList.Count - 1
	If $count = -1 Then $count = $maxIndx - $From
	If ($From < 0) Or ($From + $count > $maxIndx) Or ($From >= $maxIndx) Then Return SetError(4, 0, -1)
	$ObjList.RemoveRange($From, $count)
	If @error Then Return SetError(3, 0, -1)
	Return 0
EndFunc   ;==>_ObjAListRemoveRange

;==================================================================================================
; Name:      _ObjAListReverse($ObjList, $From, $To)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
;            $From     - StartIndex ab dem die Elemente revers angeordnet werden sollen
;            $To       - EndIndex
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      3  Aktion fehlgeschlagen
;                      4  Index außerhalb Bereich
;==================================================================================================
Func _ObjAListReverse(ByRef $ObjList, $From = 0, $To = 'UBound')
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	Local $maxIndx = $ObjList.Count - 1
	If $To = 'UBound'  Then $To = $maxIndx
	If ($From < 0) Or ($To > $maxIndx) Or ($From > $maxIndx) Then Return SetError(4, 0, -1)
	$ObjList.Reverse($From, $To)
	If @error Then Return SetError(3, 0, -1)
	Return 0
EndFunc   ;==>_ObjAListReverse

;==================================================================================================
; Name:      _ObjAListSetRange($ObjList, $ObjRange, $Index)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
;            $ObjRange - Range mit dem überschrieben werden soll
;            $Index    - Index ab dem überschrieben werden soll
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Objekt Range existiert nicht
;                      3  Aktion fehlgeschlagen
;                      4  Index außerhalb Bereich
;==================================================================================================
Func _ObjAListSetRange(ByRef $ObjList, ByRef $ObjRange, $Index = 0)
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	If (Not IsObj($ObjRange)) Then Return SetError(2, 0, -1)
	Local $maxIndx = $ObjList.Count - 1
	Local $CountIns = $ObjRange.Count
	If ($Index < 0) Or ($Index > $maxIndx) Or ($Index + $CountIns > $maxIndx) Then Return SetError(4, 0, -1)
	$ObjList.SetRange($Index, $ObjRange)
	If @error Then Return SetError(3, 0, -1)
	Return 0
EndFunc   ;==>_ObjAListSetRange

;==================================================================================================
; Name:      _ObjAListToString($ObjList)
; Parameter: $ObjList  - Handle des Arraylist-Objektes
; Return:    Erfolg:   String mit dem Objekt
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;==================================================================================================
Func _ObjAListToString($ObjList)
	If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
	Return $ObjList.ToString
EndFunc   ;==>_ObjAListToString


#cs
	=========================== OBJEKT 'System.Collections.Queue' =====================================
	*** Funktionssammlung ***
	
	_ObjQueueCreate()
	Erzeugt ein Queue-Objekt
	
	_ObjQueueAdd(Objekt, Wert)
	Fügt einem Queue-Objekt einen Wert hinzu
	
	_ObjQueueSearch(Objekt, Wert)
	Prüft auf Vorkommen des Wertes im Queue
	
	_ObjQueueGetFirst(Objekt)
	Gibt das erste Element aus dem Queue zurück, es verbleibt im Queue
	
	_ObjQueuePopFirst(Objekt)
	Gibt das erste Element aus dem Queue zurück, UND löscht es aus dem Queue
	
	_ObjQueueCount(Objekt)
	Gibt die Anzahl der Elemente des Queue zurück
	
	_ObjQueueToArray(Objekt)
	Gibt ein 1D-Array mit den Elementen des Queue zurück
	
	===================================================================================================
#ce
;==================================================================================================
; Name:      _ObjQueueCreate()
; Return:    Erfolg:   Handle des Queue-Objektes
;            Fehler:  -1
;        Fehlerwert:   1  Objekt konnte nicht erstellt werden
;==================================================================================================
Func _ObjQueueCreate()
	Local $obj = ObjCreate("System.Collections.Queue")
	If (Not IsObj($obj)) Then
		Return SetError(1, 0, -1)
	Else
		Return $obj
	EndIf
EndFunc   ;==>_ObjQueueCreate

;==================================================================================================
; Name:      _ObjQueueAdd($ObjQueue, $Value)
; Parameter: $ObjQueue - Handle des Queue-Objektes
;            $Value    - Wert der hinzugefügt werden soll
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Wert ohne Inhalt übergeben
;                      3  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjQueueAdd(ByRef $ObjQueue, $VALUE = '')
	If (Not IsObj($ObjQueue)) Then Return SetError(1, 0, -1)
	If $VALUE = '' Then Return SetError(2, 0, -1)
	$ObjQueue.Enqueue($VALUE)
	If @error Then Return SetError(3, 0, -1)
	Return 0
EndFunc   ;==>_ObjQueueAdd

;==================================================================================================
; Name:      _ObjQueueSearch($ObjQueue, $Value)
; Parameter: $ObjQueue - Handle des Queue-Objektes
;            $Value    - Wert auf dessen Existenz geprüft wird
; Return:    Erfolg:   TRUE   Wert existiert
;                      FALSE  Wert existiert nicht
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Wert ohne Inhalt übergeben
;                      3  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjQueueSearch(ByRef $ObjQueue, $VALUE = '')
	If (Not IsObj($ObjQueue)) Then Return SetError(1, 0, -1)
	If $VALUE = '' Then Return SetError(2, 0, -1)
	If $ObjQueue.Contains($VALUE) Then
		Return True
	Else
		Return False
	EndIf
	If @error Then Return SetError(3, 0, -1)
EndFunc   ;==>_ObjQueueSearch

;==================================================================================================
; Name:      _ObjQueueGetFirst($ObjQueue)
; Parameter: $ObjQueue - Handle des Queue-Objektes
; Return:    Erfolg:   Erster Wert des Queue
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;==================================================================================================
Func _ObjQueueGetFirst(ByRef $ObjQueue)
	If (Not IsObj($ObjQueue)) Then Return SetError(1, 0, -1)
	Return $ObjQueue.Peek
EndFunc   ;==>_ObjQueueGetFirst

;==================================================================================================
; Name:      _ObjQueuePopFirst($ObjQueue)
; Parameter: $ObjQueue - Handle des Queue-Objektes
; Return:    Erfolg:   Erster Wert des Queue, wird gleichzeitig gelöscht
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;==================================================================================================
Func _ObjQueuePopFirst(ByRef $ObjQueue)
	If (Not IsObj($ObjQueue)) Then Return SetError(1, 0, -1)
	Return $ObjQueue.Dequeue
EndFunc   ;==>_ObjQueuePopFirst

;==================================================================================================
; Name:      _ObjQueueCount($ObjQueue)
; Parameter: $ObjQueue - Handle des Queue-Objektes
; Return:    Erfolg:   Anzahl der Elemente im Queue
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;==================================================================================================
Func _ObjQueueCount(ByRef $ObjQueue)
	If (Not IsObj($ObjQueue)) Then Return SetError(1, 0, -1)
	Return $ObjQueue.Count
EndFunc   ;==>_ObjQueueCount

;==================================================================================================
; Name:      _ObjQueueToArray($ObjQueue)
; Parameter: $ObjQueue - Handle des Queue-Objektes
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      3  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjQueueToArray(ByRef $ObjQueue)
	If (Not IsObj($ObjQueue)) Then Return SetError(1, 0, -1)
	Local $Array = $ObjQueue.ToArray
	If @error Then Return SetError(3, 0, -1)
	Return $Array
EndFunc   ;==>_ObjQueueToArray


#cs
	=========================== OBJEKT 'System.Collections.Stack' =====================================
	*** Funktionssammlung ***
	
	_ObjStackCreate()
	Erzeugt ein Stack-Objekt
	
	_ObjStackAdd(Objekt, Wert)
	Fügt einem Stack-Objekt einen Wert hinzu
	
	_ObjStackSearch(Objekt, Wert)
	Prüft auf Vorkommen des Wertes im Stack
	
	_ObjStackGetFirst(Objekt)
	Gibt das erste Element aus dem Stack zurück, es verbleibt im Stack
	
	_ObjStackPopLast(Objekt)
	Gibt das Letzte Element aus dem Stack zurück, UND löscht es aus dem Stack
	
	_ObjStackCount(Objekt)
	Gibt die Anzahl der Elemente des Stack zurück
	
	_ObjStackToArray(Objekt)
	Gibt ein 1D-Array mit den Elementen des Stack zurück
	
	===================================================================================================
#ce
;==================================================================================================
; Name:      _ObjStackCreate()
; Return:    Erfolg:   Handle des Stack-Objektes
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;==================================================================================================
Func _ObjStackCreate()
	Local $obj = ObjCreate("System.Collections.Stack")
	If (Not IsObj($obj)) Then
		Return SetError(1, 0, -1)
	Else
		Return $obj
	EndIf
EndFunc   ;==>_ObjStackCreate

;==================================================================================================
; Name:      _ObjStackAdd($ObjStack, $Value)
; Parameter: $ObjStack - Handle des Stack-Objektes
;            $Value    - Wert der hinzugefügt werden soll
; Return:    Erfolg:   0
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Wert ohne Inhalt übergeben
;                      3  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjStackAdd(ByRef $ObjStack, $VALUE = '')
	If (Not IsObj($ObjStack)) Then Return SetError(1, 0, -1)
	If $VALUE = '' Then Return SetError(2, 0, -1)
	$ObjStack.Push($VALUE)
	If @error Then Return SetError(3, 0, -1)
	Return 0
EndFunc   ;==>_ObjStackAdd

;==================================================================================================
; Name:      _ObjStackSearch($ObjStack, $Value)
; Parameter: $ObjStack - Handle des Stack-Objektes
;            $Value    - Wert auf dessen Existenz geprüft wird
; Return:    Erfolg:   TRUE   Wert ist enthalten
;                      FALSE  Wert ist nicht enthalten
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      2  Wert ohne Inhalt übergeben
;                      3  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjStackSearch(ByRef $ObjStack, $VALUE = '')
	If (Not IsObj($ObjStack)) Then Return SetError(1, 0, -1)
	If $VALUE = '' Then Return SetError(2, 0, -1)
	If $ObjStack.Contains($VALUE) Then
		Return True
	Else
		Return False
	EndIf
	If @error Then Return SetError(3, 0, -1)
EndFunc   ;==>_ObjStackSearch

;==================================================================================================
; Name:      _ObjStack($ObjStack)
; Parameter: $ObjStack - Handle des Stack-Objektes
; Return:    Erfolg:   Erstes Element im Stack
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;==================================================================================================
Func _ObjStackGetFirst(ByRef $ObjStack)
	If (Not IsObj($ObjStack)) Then Return SetError(1, 0, -1)
	Return $ObjStack.Peek
EndFunc   ;==>_ObjStackGetFirst

;==================================================================================================
; Name:      _ObjStackPopLast($ObjStack)
; Parameter: $ObjStack - Handle des Stack-Objektes
; Return:    Erfolg:   Letzter Wert des Stack, wird gleichzeitig gelöscht
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;==================================================================================================
Func _ObjStackPopLast(ByRef $ObjStack)
	If (Not IsObj($ObjStack)) Then Return SetError(1, 0, -1)
	Return $ObjStack.Pop
EndFunc   ;==>_ObjStackPopLast

;==================================================================================================
; Name:      _ObjStackCount($ObjStack)
; Parameter: $ObjStack - Handle des Stack-Objektes
; Return:    Erfolg:   Anzahl der Elemente des Stack
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;==================================================================================================
Func _ObjStackCount(ByRef $ObjStack)
	If (Not IsObj($ObjStack)) Then Return SetError(1, 0, -1)
	Return $ObjStack.Count
EndFunc   ;==>_ObjStackCount

;==================================================================================================
; Name:      _ObjStackToArray($ObjStack)
; Parameter: $ObjStack - Handle des Stack-Objektes
; Return:    Erfolg:   1D-Array mit den Elementen des Stack
;            Fehler:  -1
;        Fehlerwert:   1  Objekt existiert nicht
;                      3  Aktion fehlgeschlagen
;==================================================================================================
Func _ObjStackToArray(ByRef $ObjStack)
	If (Not IsObj($ObjStack)) Then Return SetError(1, 0, -1)
	Local $Array = $ObjStack.ToArray
	If @error Then Return SetError(3, 0, -1)
EndFunc   ;==>_ObjStackToArray



#cs
	================================ SONSTIGE FUNKTIONEN ==============================================
	
	_ArrayToList()
	Konvertiert ein 1-Dimensionales Array in eine Liste, Queue oder Stack
	oder ein 2-Dimensionales Array in eine Hash-Tabelle
	
	_FileReadToList(Datei)
	Liest die angegebene Datei in ein Arraylist-Objekt
	
	_FileListToList(Pfad, Filter, Flag)
	Listet alle Dateien und Ordner eines Pfades (arbeitet wie Dir mit dem Schalter /B)
	
	===================================================================================================
#ce
;=================================================================================================
;
; Function Name:    _ArrayToList()
; Description:      Konvertiert ein 1-dimensionales Array in eine Liste, Queue oder Stack
;                   oder ein 2-dimensionales Array in eine Hash-Tabelle
;
; Parameter(s):     $Array   - Das zu konvertierende Array
;                   [Typ]    - gewünschter Datenstrukturtyp:
;                            "List"  = ArrayList (Default)
;                            "Queue" = Warteschlange
;                            "Stack" = Stapelspeicher
;                            "Hash"  = Hash-Tabelle (Schlüssel-Wert Paar); erfordert: Array[n][2]
;                                                                          Array[n][0] = Schlüssel
;                                                                          Array[n][1] = Wert
;                   [$von]   - Start array index (Default = 0)
;                   [$bis]   - End array index (Default = Ubound - 1)
;                   [DeleteArray] - löscht das umzuwandelnde Array nach Abarbeitung (Default = 0)
;
; Requirement(s):   None.
; Return Value(s):  bei Erfolg - Die gewünschte Datenstruktur
;                   Bei Fehler - 0
;                        @Error=1 - kein korrektes Array als Parameter angegeben
;                        @Error=2 - Bereichsfehler eines angegebenen Index
;                        @Error=3 - Falsche Angabe für den $Typ-Parameter
;                        @Error=4 - Array entspricht nicht den Anforderungen für Hashtable
;
; Author(s):        [EMAIL]AspirinJunkie@german-nlite.de[/EMAIL]
;
; Modified:         BugFix (bugfix@autoit.de) (Hashtable mit integriert)
;
; Note(s):          Durch Vertauschen des $von mit dem $bis Parameter kann die
;                   Reihenfolge der Elemente vertauscht werden.
;
;=================================================================================================

Func _ArrayToListByType(ByRef $Array, $Type = "List", $von = 0, $bis = 'UBound', $DeleteArray = 0)
	If Not IsArray($Array) Then Return SetError(1, 0, 0)
	If $Type = "Hash"  Then
		If UBound($Array, 2) <> 2 Then Return SetError(4, 0, 0)
	EndIf
	Local $i, $Liste, $Step = 1
	If String($bis) = 'UBound'  Then $bis = UBound($Array) - 1
	If $bis > UBound($Array) - 1 Or $von > UBound($Array) - 1 Or 0 > $von Or 0 > $bis Then Return SetError(2, 0, 0)
	If $von > $bis Then $Step = -1
	Switch $Type
		Case "List"
			$Liste = ObjCreate("System.Collections.ArrayList")
			For $i = $von To $bis Step $Step
				$Liste.Add($Array[$i])
			Next
		Case "Queue"
			$Liste = ObjCreate("System.Collections.Queue")
			For $i = $von To $bis Step $Step
				$Liste.Enqueue($Array[$i])
			Next
		Case "Stack"
			$Liste = ObjCreate("System.Collections.Stack")
			For $i = $von To $bis Step $Step
				$Liste.Push($Array[$i])
			Next
		Case "Hash"
			$Liste = ObjCreate("System.Collections.Hashtable")
			For $i = $von To $bis Step $Step
				$Liste.Add($Array[$i][0], $Array[$i][1])
			Next
		Case Else
			Return SetError(3, 0, 0)
	EndSwitch
	If $DeleteArray Then $Array = 0
	Return $Liste
EndFunc   ;==>_ArrayToListByType

;===============================================================================
;
; Description:      Reads the specified file into an array-list object
; Syntax:           _FileReadToList($File)
; Parameter(s):     $File - Path and filename of the file to be read
; Requirement(s):   None
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 and sets @error on errors
;                        @Error=1 Failure Creating the ArrayList-Object
;                        @Error=2 Failure Creating the FileSystem-Object
;                       @Error=3 File don´t exists
;
; Author(s):        AspirinJunkie <AspirinJunkie at german-nlite dot de>
; Note(s):          None
;
;===============================================================================
Func _FileReadToList($File)
	Local $FileHandle
	Local $List = ObjCreate("System.Collections.ArrayList")
	If @error Then Return SetError(1, 1, 0)
	Local $FSObj = ObjCreate('Scripting.FileSystemObject')
	If @error Then Return SetError(2, 2, 0)
	If Not $FSObj.FileExists($File) Then Return SetError(3, 3, 0)
	$FileHandle = $FSObj.OpenTextFile($File, 1)
	Do
		$List.add($FileHandle.ReadLine())
	Until $FileHandle.AtEndOfStream()
	$FileHandle.close
	Return $List
EndFunc   ;==>_FileReadToList

;===============================================================================
;
; Description:      lists all files and folders in a specified path (Similar to using Dir with the /B Switch)
; Syntax:           _FileListToList($Path, $Filter = "*", $Flag = 0)
; Parameter(s):        $Path = Path to generate filelist for
;                    $sFilter = The filter to use. Search the Autoit3 manual for the word "WildCards" For details
;                   $iFlag = determines weather to return file or folders or both
;                        $iFlag=0(Default) Return both files and folders
;                       $iFlag=1 Return files Only
;                        $iFlag=2 Return Folders Only
;
; Requirement(s):   None
; Return Value(s):  On Success - Returns an Array-List Object containing the list of files and folders in the specified path
;                        On Failure - Returns the an empty string "" if no files are found and sets @Error on errors
;                        @Error=1 Failure Creating the ArrayList-Object
;                        @Error=2 Failure Creating the FileSystem-Object
;                       @Error=3 Invalid $Flag
;                       @Error=4 $Path don´t exists
;
; Author(s):        AspirinJunkie <AspirinJunkie at german-nlite dot de>
; Note(s):            -
;===============================================================================
Func _FileListToList($Path, $Filter = '*', $Flag = 0)
	Local $Folder, $i, $e
	Local $Replaces[8][2] = [['.', '\.'  ], ['*', '.*'  ], ['?', '.'  ], ['+', '\+'  ], ['-', '\-'  ], ['(', '\('  ], [')', '\)'  ], ['[', '\['  ]]
	Local $List = ObjCreate("System.Collections.ArrayList")
	If @error Then Return SetError(1, 1, '')
	Local $FSObj = ObjCreate('Scripting.FileSystemObject')
	If @error Then Return SetError(2, 2, '')
	For $i = 0 To 7
		$Filter = StringReplace($Filter, $Replaces[$i][0], $Replaces[$i][1])
	Next
	$Filter = '^' & $Filter & '\z'
	If Not ($Flag = 0 Or $Flag = 1 Or $Flag = 2) Then Return SetError(3, 3, '')
	If Not $FSObj.FolderExists($Path) Then Return SetError(4, 4, '')
	$Folder = $FSObj.GetFolder($Path)
	If $Flag < 2 Then
		For $e In $Folder.Files
			If StringRegExp($e.Name, $Filter) Then $List.add($e.Name)
		Next
	EndIf
	If Not ($Flag = 1) Then
		For $e In $Folder.SubFolders
			If StringRegExp($e.Name, $Filter) Then $List.add($e.Name)
		Next
	EndIf
	Return $List
EndFunc   ;==>_FileListToList