Sortierung in Listenfeld gleich nach Programmstart

  • Ich verwende folgende Funktion um Spalten eines Listenfeldes zu sortieren:

    [autoit]


    $listview_dateiliste = GUICtrlCreateListView("Dateiname|Typ", 18, 209, 265, 334)
    GUICtrlSetOnEvent(-1, "_ListViewDateiSort")
    Func _ListViewDateiSort()
    _GUICtrlListView_SortItems($listview_dateiliste, GUICtrlGetState($listview_dateiliste))
    EndFunc

    [/autoit]

    Das Funktioniert auch soweit ganz gut.

    Nur hätte ich gerne das die Sortierung gleich nach starten meines Programmes und dann Aufsteigernd durchgeführt wird.

    Um das Verzeichnis nach dem starten einzulesen verwende ich folgende Funktion:

    [autoit]


    Func _DirOpen()
    Local $aFilelist, $ordnername = GUICtrlRead($input_ordnername)
    If $ordnername <>"" Then
    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(StringTrimRight($aFilelist[$i], 4) & "|" & StringLower(StringRight($aFilelist[$i], 3)), $listview_dateiliste)
    Next
    _GUICtrlListView_SetColumnWidth(GUICtrlGetHandle($listview_dateiliste), 0, $LVSCW_AUTOSIZE)
    EndIf
    _ListViewDateiSort()
    EndFunc

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

    dabei dachte ich mir ich schmeiß die Sortierung ans Ende der Funktion.

    Nur zieht das irgendwie nicht.

    Ich leses gerade das _GUICtrlListView_SortItems nur auf Klicks in die Spaltenüberschrift reagiert.

    Wie könnte ich das lösen?

    Einmal editiert, zuletzt von DerSchatten (9. September 2011 um 09:51)

    • Offizieller Beitrag

    Poste mal ein lauffähiges Script, dann bau ich dir eine Sortierung ein. Hab aber keine Lust dazu, extra ein Script zu schreiben.


    Edit: Du kannst dir aber auch das Beispiel von _GUICtrlListView_RegisterSortCallBack ansehen. ;)

    Spoiler anzeigen
    [autoit]

    Opt('MustDeclareVars', 1)

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

    Global $hListView, $hListView2

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

    _Example1()
    _Example2()

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

    Func _Example1()
    Local $hImage, $aIcons[3] = [0, 3, 6]
    Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE)
    Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_DOUBLEBUFFER)

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

    GUICreate("_GUICtrlListView: Registriert die 'Simple Sort callback' Funktion", 400, 200)

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

    $hListView = GUICtrlCreateListView("Spalte 1|Spalte 2|Spalte 3", 10, 10, 280, 180, -1, $iExWindowStyle)
    _GUICtrlListView_SetExtendedListViewStyle($hListView, $iExListViewStyle)

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

    ; Lädt die Bilder
    $hImage = _GUIImageList_Create(18, 18, 5, 3)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -7)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -12)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -3)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -4)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -5)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -6)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -9)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -10)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -11)
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)

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

    _AddRow($hListView, "ABC|000666|10.05.2004", $aIcons)
    _AddRow($hListView, "DEF|444|11.05.2005", $aIcons, 1)
    _AddRow($hListView, "CDE|555|12.05.2004", $aIcons, 2)

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

    GUISetState()

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

    _GUICtrlListView_RegisterSortCallBack($hListView)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $hListView
    ; Kick off the sort callback
    _GUICtrlListView_SortItems($hListView, GUICtrlGetState($hListView))
    EndSwitch
    WEnd

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

    _GUICtrlListView_UnRegisterSortCallBack($hListView)
    GUIDelete()
    EndFunc ;==>_Example1

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

    Func _Example2()
    Local $hImage, $aIcons[3] = [0, 3, 6]
    Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE)
    Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_DOUBLEBUFFER)

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

    GUICreate("ListView: Sortieren (Behandelt Zahlen als Strings)", 450, 200, 100)

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

    $hListView = GUICtrlCreateListView("Spalte 1|Spalte 2|Spalte 3", 10, 10, 430, 180, -1, $iExWindowStyle)
    _GUICtrlListView_SetExtendedListViewStyle($hListView, $iExListViewStyle)

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

    ; Lädt die Bilder
    $hImage = _GUIImageList_Create(18, 18, 5, 3)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -7)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -12)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -3)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -4)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -5)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -6)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -9)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -10)
    _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -11)
    _GUICtrlListView_SetImageList($hListView, $hImage, 1)

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

    _AddRow($hListView, "ABC|000666|10.05.2004", $aIcons)
    _AddRow($hListView, "DEF|444|11.05.2005", $aIcons, 1)
    _AddRow($hListView, "CDE|555|12.05.2004", $aIcons, 2)

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

    GUISetState()

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

    GUICreate("ListView: Sortieren (Behandelt Zahlen als Ziffern)", 400, 200, 560)

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

    $hListView2 = GUICtrlCreateListView("Spalte 1|Spalte 2|Spalte 3", 10, 10, 380, 180, -1, $iExWindowStyle)
    _GUICtrlListView_SetExtendedListViewStyle($hListView2, $iExListViewStyle)
    _GUICtrlListView_SetImageList($hListView2, $hImage, 1)

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

    _AddRow($hListView2, "ABC|000666|10.05.2004", $aIcons)
    _AddRow($hListView2, "DEF|444|11.05.2005", $aIcons, 1)
    _AddRow($hListView2, "CDE|555|12.05.2004", $aIcons, 2)

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

    GUISetState()

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

    _GUICtrlListView_RegisterSortCallBack($hListView, False)
    _GUICtrlListView_RegisterSortCallBack($hListView2)
    GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

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

    _GUICtrlListView_UnRegisterSortCallBack($hListView)
    _GUICtrlListView_UnRegisterSortCallBack($hListView2)
    GUIRegisterMsg($WM_NOTIFY, "")
    EndFunc ;==>_Example2

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

    Func _AddRow($hWnd, $sItem, $aIcons, $iPlus = 0)
    Local $aItem = StringSplit($sItem, "|")
    Local $iIndex = _GUICtrlListView_AddItem($hWnd, $aItem[1], $aIcons[0] + $iPlus, _GUICtrlListView_GetItemCount($hWnd) + 9999)
    _GUICtrlListView_SetColumnWidth($hWnd, 0, $LVSCW_AUTOSIZE_USEHEADER)

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

    For $x = 2 To $aItem[0]
    _GUICtrlListView_AddSubItem($hWnd, $iIndex, $aItem[$x], $x - 1, $aIcons[$x - 1] + $iPlus)
    _GUICtrlListView_SetColumnWidth($hWnd, $x - 1, $LVSCW_AUTOSIZE)
    Next
    EndFunc ;==>_AddRow

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

    Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iCode, $tNMHDR, $hWndListView, $hWndListView2

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

    $hWndListView = $hListView
    $hWndListView2 = $hListView2
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    If Not IsHWnd($hListView2) Then $hWndListView2 = GUICtrlGetHandle($hListView2)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")

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

    Switch $hWndFrom
    Case $hWndListView, $hWndListView2
    Switch $iCode
    Case $LVN_COLUMNCLICK ; Eine Spalte wurde angeklickt
    Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)

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

    ; Anstoßen der Callback-Sortierfunktion
    _GUICtrlListView_SortItems($hWndFrom, DllStructGetData($tInfo, "SubItem"))
    ; Kein Rückgabewert
    EndSwitch
    EndSwitch
    Return $__LISTVIEWCONSTANT_GUI_RUNDEFMSG
    EndFunc ;==>_WM_NOTIFY

    [/autoit]
  • Bitteschön, mein Script:

    [autoit]


    #Include <GuiListView.au3> ;Mehrfachauswahl
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>
    #Include <File.au3>
    #include <Constants.au3>
    #include <ComboConstants.au3>
    #include <ButtonConstants.au3>
    #include <GuiEdit.au3>
    If FileExists(@TempDir & "\zoom.tmp") Then
    Else
    DirCreate(@TempDir & "\zoom.tmp")
    Endif
    FileInstall(".\ZoomCopy64.gif", @TempDir & "\zoom.tmp\ZoomCopy64.gif", 1)
    FileInstall(".\bericht.ico", @TempDir & "\zoom.tmp\bericht.ico", 1)
    FileInstall(".\image.ico", @TempDir & "\zoom.tmp\image.ico", 1)
    FileInstall(".\links.ico", @TempDir & "\zoom.tmp\links.ico", 1)
    FileInstall(".\ordner.ico", @TempDir & "\zoom.tmp\ordner.ico", 1)
    FileInstall(".\rechts.ico", @TempDir & "\zoom.tmp\rechts.ico", 1)
    Global Const $VK_RETURN = 0x0D
    Global Const $NM_DBKLICK = -3
    Global $deletefile, $dateipfad
    Opt("GUIOnEventMode", 1)
    ;GUI Main
    $gui_main = GUICreate("Zoom Copy 64", 772, 562) ;1200, 562
    GUISetOnEvent($GUI_EVENT_CLOSE, "_CloseGui")
    GUICtrlCreatePic(@TempDir & "\zoom.tmp\ZoomCopy64.gif", 191, 20, 389, 52)
    GUIRegisterMsg(0x004E, "_DoubleClickOnListView")
    ;Lokal
    $group_dateipc = GUICtrlCreateGroup("Verzeichnis lokaler PC", 8, 94, 286, 459)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $group_dateiiec = GUICtrlCreateGroup("Verzeichnis IEC/Image", 394, 94, 370, 459)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $input_ordnername = GUICtrlCreateInput(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Zoom Copy 64", "Path"), 18, 118, 232, 21, BitOR($ES_LEFT, $ES_AUTOHSCROLL))
    GUICtrlSetTip(-1, "Verzeichnispfad eingeben")
    $hInput_ordnername = GUICtrlGetHandle($input_ordnername)
    $wProcHandle = DllCallbackRegister("_WindowProc", "int", "hwnd;uint;wparam;lparam")
    $wProcOld = _WinAPI_SetWindowLong($hInput_ordnername, $GWL_WNDPROC, DllCallbackGetPtr($wProcHandle))
    $button_dateiauswahl = GUICtrlCreateButton("", 254, 117, 30, 23, $BS_ICON)
    GUICtrlSetImage($button_dateiauswahl, @TempDir & "\zoom.tmp\ordner.ico")
    GUICtrlSetTip(-1, "Verzeichnispfad auswählen")
    GUICtrlSetOnEvent(-1, "_AuswahlPfad")
    GUICtrlCreateLabel("Datei Filter:", 56, 182, 80, 18)
    GUICtrlSetFont(-1, 9, 600, 0)
    $combo_dateityp = GUICtrlCreateCombo("", 140, 179, 143, 21, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "IMAGE Dateien|PRG Dateien|SEQ Dateien|D64 Dateien|D71 Dateien|D80 Dateien|D81 Dateien|D82 Dateien|G64 Dateien|NBZ Dateien|NIB Dateien|NB2 Dateien", "IMAGE Dateien")
    GUICtrlSetTip(-1, "Nach Dateityp filtern")
    GUICtrlSetOnEvent(-1, "_DirOpen")
    $button_refresh = GUICtrlCreateButton("Pfad speichern", 17, 144, 84, 25)
    GUICtrlSetTip(-1, "Verzeichnispfad speichern")
    GUICtrlSetOnEvent(-1, "_DirSave")
    $button_refresh = GUICtrlCreateButton("Neu laden", 200, 144, 84, 25)
    GUICtrlSetTip(-1, "Verzeichnis neu einlesen")
    GUICtrlSetOnEvent(-1, "_DirOpen")
    $listview_dateiliste = GUICtrlCreateListView("Dateiname|Typ", 18, 209, 265, 334)
    GUICtrlSetOnEvent(-1, "_ListViewDateiSort")

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

    ;Übertragung
    GUICtrlCreateGroup("Übertragung", 304, 94, 80, 215)
    GUICtrlCreateLabel("d64copy", 314, 113, 60, 14)
    GUICtrlSetFont(-1, 9, 400, 4)
    $radio1 = GUICtrlCreateRadio("Auto", 314, 133, 60, 14)
    $radio2 = GUICtrlCreateRadio("Original", 314, 153, 60, 14)
    $radio3 = GUICtrlCreateRadio("Seriell 1", 314, 173, 60, 14)
    $radio4 = GUICtrlCreateRadio("Seriell 2", 314, 193, 60, 14)
    $radio5 = GUICtrlCreateRadio("Parallel", 314, 213, 60, 14)
    GUICtrlCreateLabel("nibtools", 314, 238, 60, 14)
    GUICtrlSetFont(-1, 9, 400, 4)
    $radio6 = GUICtrlCreateRadio("Parallel", 314, 258, 60, 14)
    GUICtrlSetState ($radio1, $GUI_CHECKED)
    $combo_laufwerktyp = GUICtrlCreateCombo("", 314, 278, 60, 21, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "1541|1571", "1541")
    GUICtrlSetTip(-1, "Laufwerkstyp auswählen")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $button_schreiben = GUICtrlCreateButton("", 312, 320, 64, 40, $BS_ICON)
    GUICtrlSetOnEvent(-1, "_WriteIEC")
    GUICtrlSetImage($button_schreiben, @TempDir & "\zoom.tmp\rechts.ico")
    GUICtrlSetTip(-1, "Image-Datei auf Diskette schreiben")
    $button_lesen = GUICtrlCreateButton("", 312, 370, 64, 40, $BS_ICON)
    GUICtrlSetOnEvent(-1, "_ReadIEC")
    GUICtrlSetImage($button_lesen, @TempDir & "\zoom.tmp\links.ico")
    GUICtrlSetTip(-1, "Disketten-Inhalt in Image-Datei schreiben")
    $button_oeffnen = GUICtrlCreateButton("", 312, 420, 64, 40, $BS_ICON)
    GUICtrlSetOnEvent(-1, "_ImageOpen")
    GUICtrlSetImage($button_oeffnen, @TempDir & "\zoom.tmp\image.ico")
    GUICtrlSetTip(-1, "Inhalt von Disk-Image anzeigen")
    $button_bericht = GUICtrlCreateButton("", 312, 470, 64, 40, $BS_ICON)
    GUICtrlSetOnEvent(-1, "_BerichtOeffnen")
    GUICtrlSetImage($button_bericht, @TempDir & "\zoom.tmp\bericht.ico")
    GUICtrlSetTip(-1, "Letzten Statusbericht anzeigen")
    ;IEC
    $edit_name = GUICtrlCreateInput("", 405, 117, 206, 21, $ES_READONLY)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetTip(-1, "Diskettenname")
    GUICtrlSetData(-1, "")
    GUICtrlSetFont(-1, 10, 400, 0, "Courier New")
    GUICtrlSetBkColor(-1, 0xEEDBCD)
    $edit_id = GUICtrlCreateInput("", 615, 117, 70, 21, $ES_READONLY)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetTip(-1, "Disketten-ID")
    GUICtrlSetData(-1, "")
    GUICtrlSetFont(-1, 10, 400, 0, "Courier New")
    GUICtrlSetBkColor(-1, 0xEEDBCD)
    $list_dir = GUICtrlCreateList("", 405, 142, 280, 339, $ES_READONLY + $WS_VSCROLL)
    GUISetOnEvent($GUI_EVENT_DROPPED, "_ImageOpen")
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUICtrlSetFont(-1, 10, 400, 0, "Courier New")
    GUICtrlSetBkColor(-1, 0xCDDAEE)
    $free_dir = GUICtrlCreateInput("",405, 470, 280, 21, $ES_READONLY)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetData(-1, "")
    GUICtrlSetFont(-1, 10, 400, 0, "Courier New")
    GUICtrlSetBkColor(-1, 0xCDDAEE)
    $edit_status = GUICtrlCreateInput("", 405, 494, 280, 21, $ES_READONLY)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetTip(-1, "Letzter Laufwerksstatus")
    GUICtrlSetFont(-1, 10, 400, 0, "Courier New")
    GUICtrlSetBkColor(-1, 0xD6EECD)
    $edit_vorgang = GUICtrlCreateInput("", 405, 522, 280, 21, $ES_READONLY)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetFont(-1, 10, 400, 0, "Courier New")
    GUICtrlSetBkColor(-1, 0xD6EECD)
    ;Laufwerkfunktionen
    $combo_laufwerkid = GUICtrlCreateCombo("", 691, 117, 65, 21, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, "8|9|10|11", "8")
    GUICtrlSetTip(-1, "Laufwerk-ID auswählen")
    GUICtrlCreateLabel("Disk:", 691, 146, 34, 18)
    GUICtrlSetFont(-1, 9, 600, 0)
    GUICtrlCreateLabel("Laufwerk:", 691, 469, 60, 18)
    GUICtrlSetFont(-1, 9, 600, 0)
    $button_dir = GUICtrlCreateButton("Verzeichnis", 691, 168, 65, 25)
    GUICtrlSetTip(-1, "Verzeichnis auslesen")
    GUICtrlSetOnEvent(-1, "_DirIEC")
    $button_format = GUICtrlCreateButton("Formatieren", 691, 207, 65, 25)
    GUICtrlSetTip(-1, "Diskette formatieren")
    GUICtrlSetOnEvent(-1, "_FormatIEC")
    $button_rename = GUICtrlCreateButton("Name/ID", 691, 235, 65, 25)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetTip(-1, "Diskettenname und ID ändern")
    GUICtrlSetOnEvent(-1, "_RenameIEC")
    $button_init = GUICtrlCreateButton("Initialisieren", 691, 263, 65, 25)
    GUICtrlSetTip(-1, "Laufwerk initialisieren")
    GUICtrlSetOnEvent(-1, "_InitIEC")
    $button_valid = GUICtrlCreateButton("Überprüfen", 691, 291, 65, 25)
    GUICtrlSetTip(-1, "Dateisystem auf Fehler überprüfen")
    GUICtrlSetOnEvent(-1, "_CheckIEC")
    $button_delete = GUICtrlCreateButton("Löschen", 691, 319, 65, 25)
    GUICtrlSetTip(-1, "Ausgewählte Datei(en) löschen")
    GUICtrlSetOnEvent(-1, "_DeleteFile")
    $button_status = GUICtrlCreateButton("Status", 691, 492, 65, 25)
    GUICtrlSetTip(-1, "Fehlerkanal von Laufwerk auslesen")
    GUICtrlSetOnEvent(-1, "_StatusIEC")
    $button_reset = GUICtrlCreateButton("Reset", 691, 520, 65, 25)
    GUICtrlSetTip(-1, "Laufwerk zurücksetzen")
    GUICtrlSetOnEvent(-1, "_ResetIEC")

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

    ;GUI Format
    $gui_format = GUICreate("Diskette im Laufwerk " & GUICtrlRead($combo_laufwerkid) & " formatieren", 392, 136)
    $input_formatname = GUICtrlCreateInput("leer", 20, 48, 140, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "Courier New")
    GUICtrlSetLimit(-1, 16)
    $input_formatid = GUICtrlCreateInput("01", 170, 48, 50, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "Courier New")
    GUICtrlSetLimit(-1, 2)
    $button_formatok = GUICtrlCreateButton("OK", 8, 82, 89, 25)
    GUICtrlSetOnEvent(-1, "_FormatIECOK")
    $button_formatbeenden = GUICtrlCreateButton("Abbrechen", 288, 82, 89, 25)
    GUICtrlSetOnEvent(-1, "_FormatIECClose")
    ;GUI Auswahl Image
    $gui_auswahlimage = GUICreate("Zieldatei angeben", 300, 120)
    GUICtrlCreateLabel("Dateinname (ohne Endung):", 12, 10, 300, 18)
    GUICtrlSetFont(-1, 9, 600, 0)
    $input_dateinameimage = GUICtrlCreateInput("neu", 10, 40, 280, 20)
    $button_imageok = GUICtrlCreateButton("OK", 10, 80, 89, 25)
    GUICtrlSetOnEvent(-1, "_ReadIECOK")
    $button_imagebeenden = GUICtrlCreateButton("Abbrechen", 200, 80, 89, 25)
    GUICtrlSetOnEvent(-1, "_AuswahlImageSchliessen")
    ;GUI Fortschritt
    $gui_progressbar = GUICreate("Lesen/Schreiben", 300, 100)
    GUICtrlCreateLabel("Vorgang läuft ...", 12, 10, 300, 18)
    GUICtrlSetFont(-1, 9, 600, 0)
    $progressbar = GUICtrlCreateProgress(10, 40, 280, 20)
    $label_progressbar = GUICtrlCreateLabel("", 12, 70, 40, 18)
    ;GUI Statusfenster
    $gui_statuscopy = GUICreate("letzter Statusbericht", 640, 480)
    $edit_statuscopy= GUICtrlCreateEdit("", 20, 20, 600, 400, BitOR($ES_READONLY, $WS_VSCROLL))
    GUICtrlSetFont(-1, 10, 400, 0, "Courier New")
    GUICtrlSetBkColor(-1, 0xCDDAEE)
    GUICtrlCreateButton("Schließen", 288, 440, 65, 25)
    GUICtrlSetOnEvent(-1, "_StatusSchliessen")
    ;GUI Warten
    $gui_warten = GUICreate("Lesen/Schreiben", 240, 76)
    GUICtrlCreateLabel("Vorgang läuft ...", 20, 10, 120, 18)
    GUICtrlSetFont(-1, 10, 600, 0)
    $label_dauer = GUICtrlCreateLabel("", 20, 40, 120, 36)

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

    ;starte mit HauptGUI
    GUISetState(@sw_show, $gui_main)
    _GUICtrlListView_RegisterSortCallBack($listview_dateiliste)
    _DirOpen()
    WinWaitClose($gui_main)
    Exit
    Func _CloseGui()
    DirRemove(@TempDir & "\zoom.tmp", 1)
    GUIDelete($gui_main)
    EndFunc
    ;Funktionen PC
    Func _AuswahlPfad()
    Local $ordnername
    $ordnername = FileSelectFolder("", "", 2, "", $gui_main)
    If Not FileExists($ordnername) Then Return
    GUICtrlSetData($input_ordnername, $ordnername)
    _DirOpen()
    EndFunc
    Func _DirSave()
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Zoom Copy 64", "Path", "REG_SZ", GUICtrlRead($input_ordnername))
    EndFunc
    Func _DirOpen()
    Local $aFilelist, $ordnername = GUICtrlRead($input_ordnername)
    If $ordnername <> "" Then
    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(StringTrimRight($aFilelist[$i], 4) & "|" & StringLower(StringRight($aFilelist[$i], 3)), $listview_dateiliste)
    Next
    _GUICtrlListView_SetColumnWidth(GUICtrlGetHandle($listview_dateiliste), 0, 150)
    _GUICtrlListView_SimpleSort($listview_dateiliste, False, 0)
    EndIf
    EndFunc
    ;Funktionen Übertragung
    Func _ReadIEC()
    _Fehlercode()
    If @error Then Return MsgBox(48, "Fehler!", "Kein IEC Gerät gefunden!", 0, $gui_main)
    Local $ordnername = GUICtrlRead($input_ordnername)
    If $ordnername = "" Then Return MsgBox(48, "Fehler!", "Es wurde kein Verzeichnispfad ausgewählt!", 0, $gui_main)
    If StringRight($ordnername, 1) <> "\" Then GUICtrlSetData($input_ordnername, $ordnername & "\")
    _AuswahlImageOeffnen()
    EndFunc
    Func _ReadIECOK()
    Local $ext, $progress, $ordnername = GUICtrlRead($input_ordnername)
    Local $eingabename = $ordnername & GUICtrlRead($input_dateinameimage)
    _AuswahlImageSchliessen()
    If GUICtrlRead($radio1) = $GUI_CHECKED Then
    $ext = ".d64"
    $dauer = "(Dauer ca. 1.15 Minuten)"
    $lesen = "d64copy.exe -t auto -d " & GUICtrlRead($combo_laufwerktyp) & " " & GUICtrlRead($combo_laufwerkid) & ' "' & $eingabename & $ext & '" '
    ElseIf GUICtrlRead($radio2) = $GUI_CHECKED Then
    $ext = ".d64"
    $dauer = "(Dauer ca. 8.5 Minuten)"
    $lesen = "d64copy.exe -t original -d " & GUICtrlRead($combo_laufwerktyp) & " " & GUICtrlRead($combo_laufwerkid) & ' "' & $eingabename & $ext & '" '
    ElseIf GUICtrlRead($radio3) = $GUI_CHECKED Then
    $ext = ".d64"
    $dauer = "(Dauer ca. 2.43 Minuten)"
    $lesen = "d64copy.exe -t serial1 -d " & GUICtrlRead($combo_laufwerktyp) & " " & GUICtrlRead($combo_laufwerkid) & ' "' & $eingabename & $ext & '" '
    ElseIf GUICtrlRead($radio4) = $GUI_CHECKED Then
    $ext = ".d64"
    $dauer = "(Dauer ca. 1.15 Minuten)"
    $lesen = "d64copy.exe -t serial2 -d " & GUICtrlRead($combo_laufwerktyp) & " " & GUICtrlRead($combo_laufwerkid) & ' "' & $eingabename & $ext & '" '
    ElseIf GUICtrlRead($radio5) = $GUI_CHECKED Then
    $ext = ".d64"
    $dauer = "(Dauer ca. 30 Sekunden)"
    $lesen = "d64copy.exe -t parallel -d " & GUICtrlRead($combo_laufwerktyp) & " " & GUICtrlRead($combo_laufwerkid) & ' "' & $eingabename & $ext & '" '
    ElseIf GUICtrlRead($radio6) = $GUI_CHECKED Then
    $ext = ".nbz"
    $dauer = "(Dauer ca. 30 Sekunden)"
    $lesen = "nibread.exe -D" & GUICtrlRead($combo_laufwerkid) & ' "' & $eingabename & $ext & '" '
    EndIf
    If FileExists($eingabename & $ext) Then
    If MsgBox(52, "Hinweis!", "Datei existiert bereits. Überschreiben?") = 6 Then
    FileDelete ($eingabename & $ext)
    Else
    _ReadIEC()
    Return
    EndIf
    EndIf
    _WartenStart()
    GUICtrlSetData($edit_vorgang, "Image wird gelesen ...")
    GUICtrlSetData($label_dauer, $dauer)
    $dir = _getDOSOutput($lesen)
    GUICtrlSetData($edit_statuscopy, StringReplace(StringReplace(StringReplace($dir, @LF, ""), @CR, @CRLF), "found 4 busses" & @CR, ""))
    _WartenStop()
    If StringLeft($dir, 5) = "found" Then
    _DirOpen()
    GUICtrlSetData($edit_vorgang, "")
    Return MsgBox(48, "Fehler!", "Keine oder fehlerhafte Disk im Laufwerk!", 0, $gui_main)
    EndIf
    GUICtrlSetData($edit_vorgang, "")
    _BerichtOeffnen()
    _DirOpen()
    EndFunc
    Func _WriteIEC()
    Local $dateiauswahl, $ordnername = GUICtrlRead($input_ordnername)
    _Fehlercode()
    If @error Then Return MsgBox(48, "Fehler!", "Kein IEC Gerät gefunden!", 0, $gui_main)
    If $ordnername = "" Then Return MsgBox(48, "Fehler!", "Es wurde kein Verzeichnispfad ausgewählt!", 0, $gui_main)
    If StringRight($ordnername, 1) <> "\" Then $ordnername &= "\"
    $dateiauswahl = _GUICtrlListView_GetSelectedIndices($listview_dateiliste, True)
    If $dateiauswahl[0] = 0 Then Return MsgBox(48, "Fehler!", "Es wurde keine Datei ausgewählt!", 0, $gui_main)
    If GUICtrlRead($radio6) = $GUI_CHECKED Then
    If StringRight(_GUICtrlListView_GetItemTextString($listview_dateiliste), 3) <> "d64" And StringRight(_GUICtrlListView_GetItemTextString($listview_dateiliste), 3) <> "g64" And StringRight(_GUICtrlListView_GetItemTextString($listview_dateiliste), 3) <> "nbz" And StringRight(_GUICtrlListView_GetItemTextString($listview_dateiliste), 3) <> "nib" And StringRight(_GUICtrlListView_GetItemTextString($listview_dateiliste), 3) <> "nb2" Then Return MsgBox(48, "Fehler!", 'Mit der aktuellen Einstellung können nur "d64", "g64", "nbz", "nib" und "nb2" Images geschrieben werden!', 0, $gui_main)
    Else
    If GUICtrlRead($combo_laufwerktyp) = "1541" And StringRight(_GUICtrlListView_GetItemTextString($listview_dateiliste), 3) <> "d64" Then Return MsgBox(48, "Fehler!", 'Mit der aktuellen Einstellung können nur "d64" Images geschrieben werden!', 0, $gui_main)
    If GUICtrlRead($combo_laufwerktyp) = "1571" And StringRight(_GUICtrlListView_GetItemTextString($listview_dateiliste), 3) <> "d71" Then Return MsgBox(48, "Fehler!", 'Mit der aktuellen Einstellung können nur "d71" Images geschrieben werden!', 0, $gui_main)
    EndIf
    _Feldvariablen()
    If GUICtrlRead($radio1) = $GUI_CHECKED Then
    $dauer = "(Dauer ca. 1.37 Minuten)"
    $schreiben = "d64copy.exe -t auto -d " & GUICtrlRead($combo_laufwerktyp) & ' "' & $ordnername & _GUICtrlListView_GetItemTextString($listview_dateiliste) & '" ' & GUICtrlRead($combo_laufwerkid)
    ElseIf GUICtrlRead($radio2) = $GUI_CHECKED Then
    $dauer = "(Dauer ca. 9.21 Minuten)"
    $schreiben = "d64copy.exe -t original -d " & GUICtrlRead($combo_laufwerktyp) & ' "' & $ordnername & _GUICtrlListView_GetItemTextString($listview_dateiliste) & '" ' & GUICtrlRead($combo_laufwerkid)
    ElseIf GUICtrlRead($radio3) = $GUI_CHECKED Then
    $dauer = "(Dauer ca. 3.07 Minuten)"
    $schreiben = "d64copy.exe -t serial1 -d " & GUICtrlRead($combo_laufwerktyp) & ' "' & $ordnername & _GUICtrlListView_GetItemTextString($listview_dateiliste) & '" ' & GUICtrlRead($combo_laufwerkid)
    ElseIf GUICtrlRead($radio4) = $GUI_CHECKED Then
    $dauer = "(Dauer ca. 1.37 Minuten)"
    $schreiben = "d64copy.exe -t serial2 -d " & GUICtrlRead($combo_laufwerktyp) & ' "' & $ordnername & _GUICtrlListView_GetItemTextString($listview_dateiliste) & '" ' & GUICtrlRead($combo_laufwerkid)
    ElseIf GUICtrlRead($radio5) = $GUI_CHECKED Then
    $dauer = "(Dauer ca. 1.37 Minuten)"
    $schreiben = "d64copy.exe -t parallel -d " & GUICtrlRead($combo_laufwerktyp) & ' "' & $ordnername & _GUICtrlListView_GetItemTextString($listview_dateiliste) & '" ' & GUICtrlRead($combo_laufwerkid)
    ElseIf GUICtrlRead($radio6) = $GUI_CHECKED Then
    $dauer = "(Dauer ca. 24 Sekunden)"
    $schreiben = "nibwrite.exe -D" & GUICtrlRead($combo_laufwerkid) & ' "' & $ordnername & _GUICtrlListView_GetItemTextString($listview_dateiliste) & '"'
    EndIf
    _WartenStart()
    GUICtrlSetData($edit_vorgang, "Image wird geschrieben ...")
    GUICtrlSetData($label_dauer, $dauer)
    $dir = _getDOSOutput($schreiben)
    GUICtrlSetData($edit_statuscopy, StringReplace(StringReplace(StringReplace($dir, @LF, ""), @CR, @CRLF), "found 4 busses" & @CR, ""))
    _WartenStop()
    If StringLeft($dir, 5) = "found" Then
    _DirOpen()
    GUICtrlSetData($edit_vorgang, "")
    Return MsgBox(48, "Fehler!", "Keine oder fehlerhafte Disk im Laufwerk!", 0, $gui_main)
    EndIf
    GUICtrlSetData($edit_vorgang, "")
    _BerichtOeffnen()
    _DirIEC()
    EndFunc
    Func _ImageOpen()
    Local $dateiauswahl, $ordnername = GUICtrlRead($input_ordnername)
    $dateiauswahl = _GUICtrlListView_GetSelectedIndices($listview_dateiliste, True)
    If $ordnername = "" Then Return MsgBox(48, "Fehler!", "Es wurde kein Verzeichnispfad ausgewählt!", 0, $gui_main)
    If StringRight($ordnername, 1) <> "\" Then GUICtrlSetData($input_ordnername, $ordnername & "\")
    If $dateiauswahl[0] = 0 Then Return MsgBox(48, "Fehler!", "Es wurde keine Datei ausgewählt!", 0, $gui_main)
    _Feldvariablen()
    GUICtrlSetData($edit_vorgang, "Disketten-Image auslesen ...")
    For $i = 1 To $dateiauswahl[0]
    If StringRight(_GUICtrlListView_GetItemTextString($listview_dateiliste, $dateiauswahl[$i]), 3) = "nbz" Then
    $temp_nbz = @TempDir & "\temp.d64"
    $dir_conv = _getDOSOutput("nibconv.exe " & '"' & $ordnername & StringReplace(_GUICtrlListView_GetItemTextString($listview_dateiliste, $dateiauswahl[$i]), "|", ".") & '" ' & '"' & $temp_nbz & '"')
    $dir = _getDOSOutput("c1541.exe " & $temp_nbz & " -list")
    FileDelete ($temp_nbz)
    GUICtrlSetState($button_delete, $GUI_DISABLE)
    Else
    $dir = _getDOSOutput("c1541.exe " & '"' & $ordnername & StringReplace(_GUICtrlListView_GetItemTextString($listview_dateiliste, $dateiauswahl[$i]), "|", ".") & '"' & " -list")
    GUICtrlSetState($button_delete, $GUI_ENABLE)
    Endif
    $dir_name = StringUpper(StringMid($dir, 4, 16))
    $dir_id = StringUpper(StringMid($dir, 21, 6))
    $dir_kurz = StringSplit(StringUpper(StringTrimLeft($dir, 27)), @LF, 1)
    $dir_free = StringReplace(StringUpper(StringTrimLeft($dir, StringInStr($dir, @LF, 0, -2))), @LF, "")
    GUICtrlSetData($edit_name, $dir_name)
    GUICtrlSetData($edit_id, $dir_id)
    For $l = 1 To UBound($dir_kurz) - 3
    _GUICtrlListBox_AddString($list_dir, $dir_kurz[$l])
    Next
    GUICtrlSetData($free_dir, $dir_free)
    GUICtrlSetData($group_dateiiec, "Verzeichnis Image: " & StringReplace(_GUICtrlListView_GetItemTextString($listview_dateiliste, $dateiauswahl[$i]), "|", "."))
    $dateipfad = $ordnername & StringReplace(_GUICtrlListView_GetItemTextString($listview_dateiliste, $dateiauswahl[$i]), "|", ".")
    Next
    GUICtrlSetData($edit_vorgang, "")
    $deletefile = 0
    EndFunc
    ;Funktionen IEC
    Func _DirIEC()
    _Fehlercode()
    If @error Then Return MsgBox(48, "Fehler!", "Kein IEC Gerät gefunden!", 0, $gui_main)
    _Feldvariablen()
    GUICtrlSetData($edit_vorgang, "Diskettenverzeichnis auslesen ...")
    $dir = _getDOSOutput("cbmctrl.exe dir " & GUICtrlRead($combo_laufwerkid))
    If StringInStr($dir, "0 .") <> 0 Then
    $dir_name = StringUpper(StringMid($dir, 5, 16))
    $dir_id = StringUpper(StringMid($dir, 22, 6))
    If StringInStr($dir, "busses", 0, -1) <> 0 Then
    ;Windows7
    $dir_kurz = StringSplit(StringUpper(StringMid($dir, 30, StringInStr($dir, @CRLF, 0, -2) - 30)), @CRLF, 1)
    $dir_free = StringReplace(StringUpper(StringMid($dir, StringInStr($dir, @CRLF, 0, -4), StringInStr($dir, @CRLF, 0, -3) - StringInStr($dir, @CRLF, 0, -4))), @CRLF, "")
    $dir_status = StringReplace(StringUpper(StringMid($dir, StringInStr($dir, @CRLF, 0, -3), StringInStr($dir, @CRLF, 0, -2) - StringInStr($dir, @CRLF, 0, -3))), @CRLF, "")
    Else
    ;WindowsXP
    $dir_kurz = StringSplit(StringUpper(StringMid($dir, 30, StringInStr($dir, @CRLF, 0, -1) - 30)), @CRLF, 1)
    $dir_free = StringReplace(StringUpper(StringMid($dir, StringInStr($dir, @CRLF, 0, -3), StringInStr($dir, @CRLF, 0, -2) - StringInStr($dir, @CRLF, 0, -3))), @CRLF, "")
    $dir_status = StringReplace(StringUpper(StringMid($dir, StringInStr($dir, @CRLF, 0, -2), StringInStr($dir, @CRLF, 0, -1) - StringInStr($dir, @CRLF, 0, -2))), @CRLF, "")
    EndIf
    GUICtrlSetData($edit_name, $dir_name)
    GUICtrlSetData($edit_id, $dir_id)
    For $l = 1 To UBound($dir_kurz) - 3
    _GUICtrlListBox_AddString($list_dir, $dir_kurz[$l])
    Next
    GUICtrlSetData($free_dir, $dir_free)
    GUICtrlSetData($edit_status, $dir_status)
    GUICtrlSetData($group_dateiiec, "Verzeichnis IEC: " & $dir_name)
    EndIf
    GUICtrlSetData($edit_vorgang, "")
    GUICtrlSetState($button_delete, $GUI_ENABLE)
    $deletefile = 1
    EndFunc
    Func _FormatIEC()
    _Fehlercode()
    If @error Then Return MsgBox(48, "Fehler!", "Kein IEC Gerät gefunden!", 0, $gui_main)
    GUISetState(@SW_DISABLE, $gui_main)
    GUISetState(@SW_SHOW, $gui_format)
    EndFunc
    Func _FormatIECOK()
    _FormatIECClose()
    _Feldvariablen()
    $dauer = "(Dauer ca. 12 Sekunden)"
    _WartenStart()
    GUICtrlSetData($edit_vorgang, "Diskette formatieren ...")
    GUICtrlSetData($label_dauer, $dauer)
    $format = _getDOSOutput("cbmformat.exe -s " & GUICtrlRead($combo_laufwerkid) & ' "' & GUICtrlRead($input_formatname) & '",' & GUICtrlRead($input_formatid))
    $format_status = StringMid($format, StringInStr($format, ",", 0, -3) - 2)
    GUICtrlSetData($edit_status, $format_status)
    GUICtrlSetData($edit_vorgang, "")
    _DirIEC()
    _WartenStop()
    EndFunc
    Func _FormatIECClose()
    GUISetState(@SW_ENABLE, $gui_main)
    GUISetState(@SW_HIDE, $gui_format)
    EndFunc
    Func _InitIEC()
    _Fehlercode()
    If @error Then Return MsgBox(48, "Fehler!", "Kein IEC Gerät gefunden!", 0, $gui_main)
    _Feldvariablen()
    GUICtrlSetData($edit_vorgang, "Laufwerk initialisieren ...")
    RunWait(@ComSpec & " /c cbmctrl.exe pcommand " & GUICtrlRead($combo_laufwerkid) & " i", "", @SW_HIDE)
    GUICtrlSetData($edit_vorgang, "")
    EndFunc
    Func _CheckIEC()
    _Fehlercode()
    If @error Then Return MsgBox(48, "Fehler!", "Kein IEC Gerät gefunden!", 0, $gui_main)
    _Feldvariablen()
    GUICtrlSetData($edit_vorgang, "Dateisystem überprüfen ...")
    RunWait(@ComSpec & " /c cbmctrl.exe pcommand " & GUICtrlRead($combo_laufwerkid) & " v", "", @SW_HIDE)
    GUICtrlSetData($edit_vorgang, "")
    EndFunc
    Func _DeleteFile()
    Local $d64dateiauswahl = _GUICtrlListBox_GetSelItems($list_dir)
    If $d64dateiauswahl[0] = 0 Then Return MsgBox(16, "Hinweis!", "Es wurden keine Dateien zum löschen ausgewählt.")
    GUICtrlSetData($edit_vorgang, "Ausgewählte Datei(n) löschen ...")
    For $i = 1 To $d64dateiauswahl[0]
    If $deletefile = 0 Then RunWait(@ComSpec & " /c c1541.exe " & '"' & $dateipfad & '" -delete ' & StringLower(StringMid(_GUICtrlListBox_GetText($list_dir, $d64dateiauswahl[$i]), 7, StringInStr(_GUICtrlListBox_GetText($list_dir, $d64dateiauswahl[$i]), '"', 0, -1) - 6)), "", @SW_HIDE)
    If $deletefile = 1 Then RunWait(@ComSpec & ' /c cbmctrl pcommand ' & GUICtrlRead($combo_laufwerkid) & ' "s:' & StringLower(StringMid(_GUICtrlListBox_GetText($list_dir, $d64dateiauswahl[$i]), 7, StringInStr(_GUICtrlListBox_GetText($list_dir, $d64dateiauswahl[$i]), '"', 0, -1) - 7)) & '"' , "", @SW_HIDE)
    Next
    If $deletefile = 0 Then _ImageOpen()
    If $deletefile = 1 Then _DirIEC()
    EndFunc
    Func _StatusIEC()
    _Fehlercode()
    If @error Then Return MsgBox(48, "Fehler!", "Kein IEC Gerät gefunden!", 0, $gui_main)
    _Feldvariablen()
    GUICtrlSetData($edit_vorgang, "Fehlerkanal auslesen ...")
    $dir = _getDOSOutput("cbmctrl.exe status " & GUICtrlRead($combo_laufwerkid))
    If StringInStr($dir, "busses", 0, -1) <> 0 Then
    ;Windows7
    $dir_status = StringReplace(StringUpper(StringLeft($dir, StringInStr($dir, @CRLF, 0, -2))), @CRLF, "")
    Else
    ;WindowsXP
    $dir_status = StringReplace(StringUpper(StringLeft($dir, StringInStr($dir, @CRLF, 0, -1) - 1)), @CRLF, "")
    EndIf
    GUICtrlSetData($edit_status, $dir_status)
    GUICtrlSetData($edit_vorgang, "")
    EndFunc
    Func _ResetIEC()
    _Fehlercode()
    If @error Then Return MsgBox(48, "Fehler!", "Kein IEC Gerät gefunden!", 0, $gui_main)
    _Feldvariablen()
    GUICtrlSetData($edit_vorgang, "Laufwerk zurücksetzen ...")
    RunWait(@ComSpec & " /c cbmctrl.exe reset", "", @SW_HIDE)
    Sleep (100)
    GUICtrlSetData($edit_vorgang, "Fehlerkanal auslesen ...")
    $dir = _getDOSOutput("cbmctrl.exe status " & GUICtrlRead($combo_laufwerkid))
    If StringInStr($dir, "busses", 0, -1) <> 0 Then
    ;Windows7
    $dir_status = StringReplace(StringUpper(StringLeft($dir, StringInStr($dir, @CRLF, 0, -2))), @CRLF, "")
    Else
    ;WindowsXP
    $dir_status = StringReplace(StringUpper(StringLeft($dir, StringInStr($dir, @CRLF, 0, -1) - 1)), @CRLF, "")
    EndIf
    GUICtrlSetData($edit_status, $dir_status)
    GUICtrlSetData($edit_vorgang, "")
    EndFunc
    ;Unterfunktionen
    Func _Feldvariablen()
    GUICtrlSetData($edit_name, "")
    GUICtrlSetData($edit_id, "")
    GUICtrlSetData($list_dir, "")
    GUICtrlSetData($free_dir, "")
    GUICtrlSetData($edit_status, "")
    GUICtrlSetData($edit_vorgang, "")
    EndFunc
    Func _AuswahlImageOeffnen()
    GUISetState(@SW_DISABLE, $gui_main)
    GUISetState(@SW_SHOW, $gui_auswahlimage)
    EndFunc
    Func _AuswahlImageSchliessen()
    GUISetState(@SW_ENABLE, $gui_main)
    GUISetState(@SW_HIDE, $gui_auswahlimage)
    EndFunc
    Func _WartenStart()
    GUISetState(@SW_DISABLE, $gui_main)
    GUISetState(@SW_SHOW, $gui_warten)
    EndFunc
    Func _WartenStop()
    GUISetState(@SW_ENABLE, $gui_main)
    GUISetState(@SW_HIDE, $gui_warten)
    EndFunc
    Func _BerichtOeffnen()
    GUISetState(@SW_SHOW, $gui_statuscopy)
    EndFunc
    Func _StatusSchliessen()
    GUISetState(@SW_HIDE, $gui_statuscopy)
    EndFunc
    Func _getDOSOutput($command)
    Local $foo = Run(@ComSpec & " /c " & $command, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    Local $line
    While 1
    $line &= StdoutRead($foo)
    If @error Then ExitLoop
    WEnd
    Return $line
    EndFunc
    Func _Fehlercode()
    Local $fehler = _getDOSOutput("cbmctrl.exe status " & GUICtrlRead($combo_laufwerkid))
    If $fehler = "" Or StringLeft($fehler, 22) = "99, driver error,00,00" Or $fehler = "found 4 busses" & @CRLF & "found 4 busses" & @CRLF Then SetError(1)
    Return
    EndFunc
    ;Sonstiges
    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, 8) = '' 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], 8) = '' 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, 8) = '' 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

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

    Return _WinAPI_CallWindowProc($wProcOld, $hWnd, $Msg, $wParam, $lParam)
    EndFunc
    Func _DoubleClickOnListView($hWndGUI, $MsgID, $wParam, $lParam)
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    If $wParam = $listview_dateiliste Then
    If $event = $NM_DBKLICK Then
    _ImageOpen()
    EndIf
    EndIf
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    EndFunc
    Func _ListViewDateiSort()
    _GUICtrlListView_SortItems($listview_dateiliste, GUICtrlGetState($listview_dateiliste))
    EndFunc
    ;Reserve
    Func _getDOSOutputZeit($command, $zeitende)
    Local $text, $Pid = Run('"' & @ComSpec & '" /c ' & $command, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    If $zeitende <> 0 Then _ProgressBar($zeitende)
    While 1
    $text &= StdoutRead($Pid)
    If @error Then ExitLoop
    GUICtrlSetData($edit_dir, GUICtrlRead($edit_dir) & $text)
    Sleep(10)
    WEnd
    Return $text
    _ProgressBarStop()
    EndFunc
    Func _ProgressBarStart()
    GUISetState(@SW_DISABLE, $gui_main)
    GUISetState(@SW_SHOW, $gui_progressbar)
    EndFunc
    Func _ProgressBarStop()
    GUISetState(@SW_ENABLE, $gui_main)
    GUISetState(@SW_HIDE, $gui_progressbar)
    EndFunc
    Func _ProgressBar($zeit)
    _ProgressBarStart()
    Sleep(3000) ;3 Sekunde warten
    For $i = 0 To 100
    GUICtrlSetData($progressbar, $i)
    GUICtrlSetData($label_progressbar, $i & "%")
    Sleep($zeit)
    Next
    GUICtrlSetData($label_progressbar, "Fertig!")
    Sleep(1000) ;1 Sekunde warten
    _ProgressBarStop()
    EndFunc

    [/autoit]

    Vielleicht könntest du dir dazu auch gleich die Funktion: _FileListToArrayEx() ansehen. Die sortiert nämlich nicht korrekt.

    Damit der Dateilister die Auswahl IMAGE Dateien anzeigt sollten Dateien mit Endung: .d64, .d71, .d80, .d81, .d82, .g64, .nbz, .nib vorhanden sein.

    Einmal editiert, zuletzt von DerSchatten (9. September 2011 um 15:54)