Ich verwende die Funktion _FileListToArrayEx um in einem ListView Ordnerinhalte anzuzeigen
[autoit]
Func _FileListToArrayEx($sPath, $sFilter = '*.*', $iFlag = 0, $sExclude = '')
If Not FileExists($sPath) Then Return SetError(1, 1, '')
If $sFilter = -1 Or $sFilter = Default Then $sFilter = '*.*'
If $iFlag = -1 Or $iFlag = Default Then $iFlag = 0
If $sExclude = -1 Or $sExclude = Default Then $sExclude = ''
Local $aBadChar[6] = ['\', '/', ':', '>', '<', '|']
For $iCC = 0 To 5
If StringInStr($sFilter, $aBadChar[$iCC]) Or _
StringInStr($sExclude, $aBadChar[$iCC]) Then Return SetError(2, 2, '')
Next
If StringStripWS($sFilter, = '' Then Return SetError(2, 2, '')
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, '')
Local $oFSO = ObjCreate("Scripting.FileSystemObject"), $sTFolder
$sTFolder = $oFSO.GetSpecialFolder(2)
Local $hOutFile = @TempDir & $oFSO.GetTempName
If Not StringInStr($sFilter, ';') Then $sFilter &= ';'
Local $aSplit = StringSplit(StringStripWS($sFilter, 8), ';'), $sRead
For $iCC = 1 To $aSplit[0]
If StringStripWS($aSplit[$iCC], = '' Then ContinueLoop
If StringLeft($aSplit[$iCC], 1) = '.' And _
UBound(StringSplit($aSplit[$iCC], '.')) - 2 = 1 Then $aSplit[$iCC] = '*' & $aSplit[$iCC]
RunWait(@ComSpec & ' /c ' & 'dir "' & $sPath & '\' & $aSplit[$iCC] _
& '" /b /o-e /od > "' & $hOutFile & '"', '', @SW_HIDE)
$sRead &= OemToChar(FileRead($hOutFile))
If Not FileExists($hOutFile) Then Return SetError(4, 4, '')
FileDelete($hOutFile)
Next
If StringStripWS($sRead, = '' Then SetError(4, 4, '')
Local $aFSplit = StringSplit(StringTrimRight(StringStripCR($sRead), 1), @LF)
Local $sHold
For $iCC = 1 To $aFSplit[0]
If $sExclude And StringLeft($aFSplit[$iCC], _
StringLen(StringReplace($sExclude, '*', ''))) = StringReplace($sExclude, '*', '') Then ContinueLoop
Switch $iFlag
Case 0
$sHold &= $aFSplit[$iCC] & Chr(1)
Case 1
If StringInStr(FileGetAttrib($sPath & '\' & $aFSplit[$iCC]), 'd') Then ContinueLoop
$sHold &= $aFSplit[$iCC] & Chr(1)
Case 2
If Not StringInStr(FileGetAttrib($sPath & '\' & $aFSplit[$iCC]), 'd') Then ContinueLoop
$sHold &= $aFSplit[$iCC] & Chr(1)
EndSwitch
Next
If StringTrimRight($sHold, 1) Then Return StringSplit(StringTrimRight($sHold, 1), Chr(1))
Return SetError(4, 4, '')
EndFunc
Func OemToChar ($szSrc)
Local $strSrc = DllStructCreate("char[" & StringLen($szSrc) + 1 & "]")
Local $strDst = DllStructCreate("char[" & StringLen($szSrc) * 2 + 1 & "]")
DllStructSetData($strSrc,1,$szSrc)
DllStructSetData($strDst,1,0)
Local $lRetVal = DllCall("user32.dll", "long", "OemToChar", "ptr", DllStructGetPtr($strSrc), "ptr", DllStructGetPtr($strDst))
If IsArray($lRetVal) And $lRetVal[0] = 1 Then
Return SetError(0,0,DllStructGetData($strDst,1))
EndIf
Return SetError(1,0,"")
EndFunc
Func _WindowProc($hWnd, $Msg, $wParam, $lParam)
Switch $hWnd
Case $hinput_ordnername
Switch $Msg
Case $WM_GETDLGCODE
Switch $wParam
Case $VK_RETURN
_DirOpen()
Return 0
EndSwitch
EndSwitch
EndSwitch
Return _WinAPI_CallWindowProc($wProcOld, $hWnd, $Msg, $wParam, $lParam)
EndFunc
Func _DirOpen()
Local $aFilelist, $ordnername = GUICtrlRead($input_ordnername)
If StringRight($ordnername, 1) <> "\" Then GUICtrlSetData($input_ordnername, $ordnername & "\")
If GUICtrlRead($combo_dateityp) = "IMAGE Dateien" Then
$aFilelist = _FileListToArrayEx($ordnername, "*.d*;*.g*;*.n*", 1)
Else
$aFilelist = _FileListToArray($ordnername, "*." & StringLeft(GUICtrlRead($combo_dateityp), 3), 1)
EndIf
If @error Then Return _GUICtrlListView_DeleteAllItems($listview_dateiliste)
_GUICtrlListView_DeleteAllItems($listview_dateiliste)
For $i = 1 To $aFilelist[0]
GUICtrlCreateListViewItem($aFilelist[$i], $listview_dateiliste)
Next
_GUICtrlListView_SetColumnWidth(GUICtrlGetHandle($listview_dateiliste), 0, $LVSCW_AUTOSIZE)
EndFunc
Nur passt die Sortierung nicht.
Die Daten werden irgendwie durcheinander angezeigt.
Lassen sich auch nicht mit _GUICtrlListView_SimpleSort($listview_dateiliste, True, 1) richtig anzeigen.