...
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
- 
				Sirius-2337
 - 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 ~
						- 
				Sirius-2337
 - 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 ~