FileOpenDialog -> nur lokale Festplatten

  • Hallo!

    Ich brauche für ein Projekt die Möglichkeit, den FileOpenDialog zu öffnen. Problem hierbei: Dieser zeigt auch Netzwerk-Laufwerke an, die ich gerne ausblenden würde. Gibt es hierfür eine Möglichkeit, die ich bisher übersehen habe? Mittels "DriveGetDrive("FIXED")" kann man sich die lokalen Festplatten ausgeben lassen - gibt es so eine Einstellungsmöglichkeit über eine UDF oder eine Option?

    Gruß
    Einexage

    EDIT:

    Bisherige Lösung - aber extrem langsam (~30 Sekunden bei nahezu Neuinstallation) - danke trotzdem für den Ansatz, Oscar :)

    Spoiler anzeigen
    [autoit]

    $hGui = GUICreate('Wählen Sie ein Programm aus:', 300, 210)
    $hTreeView = GUICtrlCreateTreeView(10, 10, 280, 150, Default, 0x00020000)
    _Root(5)
    $hOk = GUICtrlCreateButton('Ok', 150, 170, 60, 25)
    $hCancel = GUICtrlCreateButton('Abbrechen', 220, 170, 70, 25)
    GUISetState()

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

    While True
    Switch GUIGetMsg()
    Case -3, $hCancel
    ConsoleWrite("Exitcode" & @CRLF)
    Exit
    Case $hOk
    ConsoleWrite("OK-code" & @CRLF)
    MsgBox(0,0, ControlTreeView($hGui, '', $hTreeView, 'GetSelected'))
    EndSwitch
    Exit
    WEnd

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

    Func _Root($iMaxtiefe, $iTiefe = 0, $sRoot = "", $hRoot = "")
    If $iTiefe > $iMaxtiefe Then Return
    If $sRoot = "" Then
    $hRoot = GUICtrlCreateTreeViewItem('Arbeitsplatz', $hTreeView)
    $aDrives = DriveGetDrive('FIXED')
    For $i = 1 To $aDrives[0]
    $hNewRoot = GUICtrlCreateTreeViewItem(DriveGetLabel($aDrives[$i]) & ' (' & StringUpper($aDrives[$i]) & ')', $hRoot)
    _Root($iMaxtiefe, $iTiefe+1, $aDrives[$i] & "", $hNewRoot)
    ControlTreeView($hGui, '', $hTreeView, 'Expand', 'Arbeitsplatz')
    Next
    Else
    $hSearch = FileFindFirstFile($sRoot & "*.*")
    While 1
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If StringInStr(FileGetAttrib($sRoot & $sFile), "D") Then
    $hNewRoot = GUICtrlCreateTreeViewItem($sFile, $hRoot)
    _Root($iMaxtiefe, $iTiefe+1, $sRoot & $sFile & "", $hNewRoot)
    ElseIf StringRight($sRoot & $sFile, 4) = ".exe" Then
    $hNewRoot = GUICtrlCreateTreeViewItem($sFile, $hRoot)
    EndIf
    WEnd
    Return
    EndIf
    EndFunc

    [/autoit]

    Edit:

    Habe jetzt ein paar Ordner ausgeschlossen, um die Performativität zu erhöhen - die üblichen Verdächtigen: Windows, System Volume Information und natürlich: $RECYCLE.BIN. Jetzt braucht das ganze nur noch etwa ein fünftel der Zeit.

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

    3 Mal editiert, zuletzt von Runa (13. August 2014 um 08:55)