Lassen wir das mit dem Duell mal und gehen lieber bei Gelegenheit einen Trinken.
Ich finde es gut, daß Du die Hilfe und die Suche schon konsultiert hast. Vermutlich lag es an den Suchbegriffen.
Mit "Durchsuchen" bzw "Systemordner" wärst Du schon weiter gekommen.
Zum Suchen habe ich folgendes für Dich geschrieben :
Code: Alles auswählen
Procedure GibtEsDirectoryeintrag (Pfad.s, SollName.s, SollExtension.s, SollTyp)
;Prüft die Existens eines Directoryeintrags
; Pfad.s z.B. "c:\"
; SollName.s z.B. "autoexec"
; SollExtension.s z.B. "bat"
; SollTyp
; entweder : #PB_DirectoryEntry_File
; oder : #PB_DirectoryEntry_Directory
; Diese Lösung ist nicht optimal aber so (hoffentlich) leicht zu verstehen
If ExamineDirectory(0, Pfad.s, "*.*")
Ergebnis = 0
SollName.s = LCase(SollName.s)
SollExtension.s = LCase(SollExtension.s)
Repeat
Typ = NextDirectoryEntry(0)
If Typ = SollTyp
Eintrag.s = LCase(DirectoryEntryName(0))
If Eintrag
Extension.s = GetExtensionPart(Eintrag)
If Extension
Name.s = Left(Eintrag.s, Len(Eintrag.s)-Len(Extension.s)-1) ; -1 wegen dem Punkt
If (Name.s = SollName.s Or SollName.s = "*") And (Extension = SollExtension.s Or SollExtension.s = "*")
ProcedureReturn #True
EndIf
EndIf
EndIf
EndIf
Until Ergebnis Or Typ = 0
EndIf
ProcedureReturn #False
EndProcedure
Eine von vielen Lösungen um einen Verzeichnisbaum rekursiv (
http://de.wikipedia.org/wiki/Rekursiv)durchzugehen gibt es unter
http://www.purebasic.fr/german/viewtopic.php?t=7354.
Eine andere wäre z.B.
http://www.purebasic.fr/german/viewtopic.php?t=7263
Unter
http://www.purebasic.fr/german/viewtopic.php?t=767 (solltest Du durchlesen) habe ich u.a. folgendes gefunden :
Code: Alles auswählen
Structure EMID
cb.b
abID.b[1]
EndStructure
; Structure ITEMIDLIST
; mkid.EMID
; EndStructure
; Die Struktur ist bei mir bereits definiert
Procedure.s GetSpecialeFolder(folder.l)
*itemid.ITEMIDLIST = #NULL
If SHGetSpecialFolderLocation_ (0, folder, @*itemid) = #NOERROR
location.s = Space (#MAX_PATH)
If SHGetPathFromIDList_ (*itemid, @location)
If Right(location, 1) <> "\" : location + "\" : EndIf
ProcedureReturn location
EndIf
EndIf
EndProcedure
Unter
http://www.vbapihelpline.de/ref/funca.p ... h&Letter=s gibt es eine deutsche Auflistung der nötigen Konstanten (die sollten in PB schon definiert sein). Du brauchst also nur die beiden oberen Codeblöcke und z.B. folgendes in eine Datei kopieren.
Code: Alles auswählen
Pfad.s = GetSpecialeFolder(#CSIDL_WINDOWS) ;(nur IE ab version 5.0) Ermittelt das Verzeichnis "Windows"
Debug GibtEsDirectoryeintrag (Pfad.s, "explorer", "exe", #PB_DirectoryEntry_File)
Debug GibtEsDirectoryeintrag (Pfad.s, "*", "exe", #PB_DirectoryEntry_File)
Debug GibtEsDirectoryeintrag (Pfad.s, "explorer", "*", #PB_DirectoryEntry_File)
Debug GibtEsDirectoryeintrag (Pfad.s, "Explorer", "exe", #PB_DirectoryEntry_File)
PS
Bitte beachte, dass Du damit immer nur bestimmte Verzeichnisse durchsuchst. In der Praxis könnte der Pfad aber sowohl "C:\Programme\WinzigWeich\BlaBla\" als auch "C:\Programme\BlaBla\" sein. Zum Teil lautet er sogar "C:\PROGRAM FILES\...". Deshalb gibt es die Möglichkeit den tatsächlichen Pfad in der Registry einzutragen. Eine Prüfung ob die Datei tatsächlich existiert erübrigt sich dadurch nicht.