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
$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()
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
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
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.