...
Ich möchte ein kleines Progrämmle basteln welches einen Ordner rekursiv durchsucht und dann alle gefundenen *.exe auflistet die ich dann per doppelklick ausführen kann.
Allerdings stehe ich vor einem Problem....
Als erstes muss ich ja per examineDirectory() und addgadgetelement den ordner durchlaufen und dann
mittels GetGadgetState() kann ich ja die index# aus dem listviewgadget abfragen aber ich weiß nicht wie ich die nummer mit dem pfad + exe verknüpfen soll damit ich einen eintrag aus der liste starten kann.
kann mir jemand helfen?
DirectoryEntryName() & GetGadgetState() irgendwie verknüpfen
- Pr0fessor
- Beiträge: 40
- Registriert: 21.07.2011 16:13
- Computerausstattung: Intel Qore2Quad Q6600, 4GB RAM, Radeon HD 5770, Windows 8.1 Pro 64bit
- Wohnort: Hagenow
- Kontaktdaten:
DirectoryEntryName() & GetGadgetState() irgendwie verknüpfen
~ PureBasic 5.21 LTS x86 | PureBasic 5.21 LTS x64 | Windows 8.1 Pro with Media Center x64 ~
Re: DirectoryEntryName() & GetGadgetState() irgendwie verknü
Wenn du mit ExamineDirectory() deine Verzeichnisse durchsuchst, kannst du deine Exen (mit Pfad) in einer LinkedList abspeichern.
Danach kannst du die LinkedList mit Foreach durchlaufen und die Einträge in dein Gadget machen.
Mit SetGadgetItemData() kannst du dann bei jedem eintrag den Pointer zu dem LinkedListElement hinterlegen, sodass du dann bei einem Doppelklick über GetGadgetItemData das Element bekommst und somit alle Informationen die du brauchst.
Danach kannst du die LinkedList mit Foreach durchlaufen und die Einträge in dein Gadget machen.
Mit SetGadgetItemData() kannst du dann bei jedem eintrag den Pointer zu dem LinkedListElement hinterlegen, sodass du dann bei einem Doppelklick über GetGadgetItemData das Element bekommst und somit alle Informationen die du brauchst.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
- Beiträge: 71
- Registriert: 29.05.2010 20:55
Re: DirectoryEntryName() & GetGadgetState() irgendwie verknü
Code: Alles auswählen
Procedure SucheExen(Directory$, List GefundeneExen.s(), IncludeHidden = #False)
Protected Dir
Protected EntryName$, EntryAtrributes, EntryType
Dir = ExamineDirectory(#PB_Any, Directory$, "*.*")
If Dir
While NextDirectoryEntry(Dir)
EntryName$ = DirectoryEntryName(Dir)
EntryAtrributes = DirectoryEntryAttributes(Dir)
EntryType = DirectoryEntryType(Dir)
If EntryName$ = "." Or EntryName$ = ".."
Continue
EndIf
If Not IncludeHidden And (EntryAtrributes & #PB_FileSystem_Hidden)
Continue
EndIf
Select EntryType
Case #PB_DirectoryEntry_Directory
SucheExen(Directory$ + EntryName$ + "\", GefundeneExen(), IncludeHidden)
Case #PB_DirectoryEntry_File
If GetExtensionPart(EntryName$) = "exe"
AddElement(GefundeneExen())
GefundeneExen() = Directory$ + EntryName$
EndIf
EndSelect
Wend
FinishDirectory(Dir)
EndIf
EndProcedure
NewList Exe.s()
SucheExen(PathRequester("Startordner wählen", ""), Exe())
If OpenWindow(0, 0, 0, 600, 500, "Start Exe", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), "Exe", 180, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(0, 2, "Full Path", 380)
HideGadget(0, 1)
Define FileInfos.SHFILEINFO
ForEach Exe()
SHGetFileInfo_(Exe(), 0, @FileInfos, SizeOf(SHFILEINFO), #SHGFI_TYPENAME|#SHGFI_ICON|#SHGFI_SMALLICON)
AddGadgetItem(0, -1, GetFilePart(Exe()) + Chr(10) + Exe(), FileInfos\hIcon)
DestroyIcon_(FileInfos\hIcon)
Next
HideGadget(0, 0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
If EventGadget() = 0 And EventType() = #PB_EventType_LeftDoubleClick
If GetGadgetState(0) <> -1
RunProgram(GetGadgetItemText(0, GetGadgetState(0), 1))
EndIf
EndIf
EndSelect
ForEver
EndIf
- Pr0fessor
- Beiträge: 40
- Registriert: 21.07.2011 16:13
- Computerausstattung: Intel Qore2Quad Q6600, 4GB RAM, Radeon HD 5770, Windows 8.1 Pro 64bit
- Wohnort: Hagenow
- Kontaktdaten:
Re: DirectoryEntryName() & GetGadgetState() irgendwie verknü
Danke euch beiden - besonderen Dank gilt Sirius-2337
das ist genau das was ich wollte
jetzt schaue ich mir das skript noch genau an (da wären doch kommentare besser... ) und werde da garantiert was lernen.
nochmals Danke
das ist genau das was ich wollte

jetzt schaue ich mir das skript noch genau an (da wären doch kommentare besser... ) und werde da garantiert was lernen.
nochmals Danke

~ PureBasic 5.21 LTS x86 | PureBasic 5.21 LTS x64 | Windows 8.1 Pro with Media Center x64 ~
- Pr0fessor
- Beiträge: 40
- Registriert: 21.07.2011 16:13
- Computerausstattung: Intel Qore2Quad Q6600, 4GB RAM, Radeon HD 5770, Windows 8.1 Pro 64bit
- Wohnort: Hagenow
- Kontaktdaten:
Re: DirectoryEntryName() & GetGadgetState() irgendwie verknü

könnte es mir jemand bitte noch ein bissel kommentieren? das würde es mir doch wesentlich erleichtern

~ PureBasic 5.21 LTS x86 | PureBasic 5.21 LTS x64 | Windows 8.1 Pro with Media Center x64 ~
-
- Beiträge: 71
- Registriert: 29.05.2010 20:55
Re: DirectoryEntryName() & GetGadgetState() irgendwie verknü
Hier das ganze mit Kommentaren
Ich hoffe es ist alles verständlich
Code: Alles auswählen
Procedure SucheExen(Directory$, List GefundeneExen.s(), IncludeHidden = #False)
;Diese Prozedur durchsucht, angefangen bei Directory$, alle Verzeichnisse nach .exe-Dateien
;und fügt 'GefundeneExen()' ein Element mit dem Pfad hinzu.
Protected Dir
Protected EntryName$, EntryAtrributes, EntryType
Dir = ExamineDirectory(#PB_Any, Directory$, "*.*")
If Dir
While NextDirectoryEntry(Dir) ;Gehe alle Dateien/Ordner nacheinander durch
EntryName$ = DirectoryEntryName(Dir) ;Dateiname der aktuellen Datei (o. Ordner)
EntryAtrributes = DirectoryEntryAttributes(Dir) ;Diverse Attribute (hier ist nur '#PB_FileSystem_Hidden' wichtig)
EntryType = DirectoryEntryType(Dir) ;Datei oder Ordner
If EntryName$ = "." Or EntryName$ = ".." ;Jeder ordner enthält diese beiden "Ordner". '..' führt ein Verzeichnis aufwärts. '.' führt ins selbe Verzeichnis (Refresh)
Continue ;Die beiden überspringen wir, da das sonst zu einer Endlos-Rekursion führen würde
EndIf
If Not IncludeHidden And (EntryAtrributes & #PB_FileSystem_Hidden) ;Wenn wir über den Parameter 'IncludeHidden' angegeben haben, das Versteckte '.exe' nicht gelistet werden sollen (Standard),
Continue ;dann überspringen wir die aktuelle Datei/ den Ordner
EndIf
Select EntryType
Case #PB_DirectoryEntry_Directory
;Wenn ein Verzeichnis gefunden wurde wird auch das nache '.exe' durchsucht (Das ist der Rekursive teil an der Prozedur)
SucheExen(Directory$ + EntryName$ + "\", GefundeneExen(), IncludeHidden)
Case #PB_DirectoryEntry_File
;Wenn eine Datei gefunden wurde und sie auf "exe" endet wird sie der Liste hinzugefügt
If GetExtensionPart(EntryName$) = "exe"
AddElement(GefundeneExen())
GefundeneExen() = Directory$ + EntryName$
EndIf
EndSelect
Wend
FinishDirectory(Dir)
EndIf
EndProcedure
NewList Exe.s() ;Hier wird die Prozedur 'SucheExen()' die Ergebnisse (Pfade zu '.exe'-Dateien) einfügen
SucheExen(PathRequester("Startordner wählen", ""), Exe()) ;'.exe'-Dateien suchen
If OpenWindow(0, 0, 0, 600, 500, "Start Exe", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) ;Fenster öffnen
ListIconGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), "Exe", 180, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection) ;ListIconGadget erstellen
AddGadgetColumn(0, 2, "Full Path", 380) ;und eine Spalte hinzufügen
HideGadget(0, 1) ;ListIconGadget kurz verstecken, damit das hinzufügen der Items schneller geht
Define FileInfos.SHFILEINFO ;Wird nur für 'SHGetFileInfo_()' und 'DestroyIcon_()' gebraucht
ForEach Exe()
SHGetFileInfo_(Exe(), 0, @FileInfos, SizeOf(SHFILEINFO), #SHGFI_TYPENAME|#SHGFI_ICON|#SHGFI_SMALLICON) ;Speichert einige Informationen über die Datei in 'FileInfos' (hier wollen wir nur das Icon der '.exe'
AddGadgetItem(0, -1, GetFilePart(Exe()) + Chr(10) + Exe(), FileInfos\hIcon)
DestroyIcon_(FileInfos\hIcon) ;Das ListIconGadget hat sich das Icon kopiert deshalb können wir dieses wieder zerstören
Next
HideGadget(0, 0) ;ListIconGadget wider sichtbar machen
Repeat ;Event-Loop
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
If EventGadget() = 0 And EventType() = #PB_EventType_LeftDoubleClick ;Wenn auf das ListIconGadget geDoppelClickt wurde
If GetGadgetState(0) <> -1 ;Wenn ein Listen-eintrag ausgewählt ist
AusgewaehltesListIconGadgetItem = GetGadgetState(0)
VollstaendigerPfadZurExe$ = GetGadgetItemText(0, AusgewaehltesListIconGadgetItem, 1) ;Der vollständige Pfad steht in der 1. Spalte (die Nummerierung fängt mit 0 an)
RunProgram(VollstaendigerPfadZurExe$) ;Starte '.exe'.
EndIf
EndIf
EndSelect
ForEver
EndIf
- Pr0fessor
- Beiträge: 40
- Registriert: 21.07.2011 16:13
- Computerausstattung: Intel Qore2Quad Q6600, 4GB RAM, Radeon HD 5770, Windows 8.1 Pro 64bit
- Wohnort: Hagenow
- Kontaktdaten:
Re: DirectoryEntryName() & GetGadgetState() irgendwie verknü
DAAANKE 
das werd´ ich mir gleich ausdrucken

das werd´ ich mir gleich ausdrucken
~ PureBasic 5.21 LTS x86 | PureBasic 5.21 LTS x64 | Windows 8.1 Pro with Media Center x64 ~