|
Eine überraschende Funktionalität ist in einer API-Funktion versteckt, die für den hier ins Auge gefassten Zweck eigentlich gar nicht vorgesehen ist. Die Rede ist von der API-Funktion FindExecutable. Unabhängig von ihrer eigentlichen Funktion, die zu einem Dateityp gehörende ausführbare Anwendung ausfindig zu machen, prüft sie zuallererst, ob die übergebene Datei überhaupt existiert. Existiert sie nicht, gibt sie den Wert 2 zurück, und fährt nicht weiter mit der Suche nach der Anwendung fort.
Im Gegensatz zur VB-eigenen Dir-Funktion kommt sie ebenso mit UNC-Pfadangaben zurecht und hat auch auf Anhieb keine Schwierigkeiten, versteckten Dateien (Hidden-Attribut gesetzt) zu finden. Da es vom Konzept der Shell her sogar ausführbare Anwendungen zur "Bearbeitung" von Ordnern, Laufwerken und Computern geben kann, können Sie mit FindExecutable gleichfalls deren Existenz prüfen.
Der Einfachheit halber haben wir die Existenzprüfung in die Hilfsfunktion PathExists verpackt:
Private Declare Function FindExecutable Lib "shell32.dll" _
Alias "FindExecutableA" (ByVal lpFile As String, _
ByVal lpDirectory As String, ByVal lpResult As String) As Long
Public Function PathExists(Path As String) As Boolean
PathExists = CBool(FindExecutable(Path, "", Space$(255)) <> 2)
End Function
Hier sehen Sie nun ein paar mögliche Aufrufbeispiele:
Debug.Print PathExists("c:")
Debug.Print PathExists("D:\")
Debug.Print PathExists("C:\Windows")
Debug.Print PathExists("C:\Windows\System\")
Debug.Print PathExists("c:\autoexec.bat")
Debug.Print PathExists("\\Computer1")
Debug.Print PathExists("\\Computer1\Programme")
Debug.Print PathExists("\\Computer1\C$\msdos.sys")
|