Wie ermittle ich "C:\Program Files\" mit SpecialFolders

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Wie ermittle ich "C:\Program Files\" mit SpecialFolders

Beitrag von Sicro »

Hallo nochmal,

folgendes Problem:

Code: Alles auswählen

Procedure.s GetSpecialFolder(Folder.l)
  Protected *itemid.ITEMIDLIST = #Null
  Protected location.s = Space(#MAX_PATH)
  
  If SHGetSpecialFolderLocation_(0, Folder, @*itemid) = #NOERROR
    If SHGetPathFromIDList_(*itemid, @location)
      If Right(location, 1) <> "\": location + "\": EndIf
      CoTaskMemFree_(*itemid)
      
      ProcedureReturn location
    EndIf
  EndIf
EndProcedure

Debug GetSpecialFolder(#CSIDL_PROGRAM_FILES)
; liefert "C:\Program Files (x86)\
Debug GetSpecialFolder(#CSIDL_PROGRAM_FILESX86)
; liefert "C:\Program Files (x86)\
Wie ermittle ich den Pfad "C:\Program Files\"?

Mfg Sicro
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Wie ermittle ich "C:\Program Files\" mit SpecialFolders

Beitrag von ts-soft »

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Wie ermittle ich "C:\Program Files\" mit SpecialFolders

Beitrag von Sicro »

Dein Beispiel-Code funktioniert auch bei mir, zeigt jedoch
in Verbindung mit meinem Code keine Wirkung - auch nicht in
meinem anderen Thread. Schade, trotzdem danke.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Re: Wie ermittle ich "C:\Program Files\" mit SpecialFolders

Beitrag von PureLust »

Sicro hat geschrieben:Dein Beispiel-Code funktioniert auch bei mir, zeigt jedoch
in Verbindung mit meinem Code keine Wirkung - auch nicht in
meinem anderen Thread. Schade, trotzdem danke.
Compiliere Deinen Source mal mit der x64-Version von PB, damit Du auch ein 64Bit-Programm erstellst, dann liefert Dir "#CSIDL_PROGRAM_FILES" auch den gewünschten Pfad.
Ein x86-Programm hat unter einem 64Bit-Windows nichts in "C:\Program Files\" zu suchen sondern gehört nach "C:\Program Files (x86)\" - daher bekommst Du für ein x86-Programm in beiden Fällen den gleichen (x86) Pfad..

Gruß, PL.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Wie ermittle ich "C:\Program Files\" mit SpecialFolders

Beitrag von Sicro »

PureLust hat geschrieben:Compiliere Deinen Source mal mit der x64-Version von PB, damit Du auch ein 64Bit-Programm erstellst, dann liefert Dir "#CSIDL_PROGRAM_FILES" auch den gewünschten Pfad.
Vielen Dank, mit PureBasic x64 geht es.
Nun habe ich mal einen Grund, zusätzlich ein x64-Programm zu erstellen (nichts gegen x64...).
PureLust hat geschrieben:Ein x86-Programm hat unter einem 64Bit-Windows nichts in "C:\Program Files\" zu suchen sondern gehört nach "C:\Program Files (x86)\" [...]
Das Programm hat nur die Aufgabe den Ordnerinhalt dieser Ordner auszulesen.

Mfg Sicro
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Wie ermittle ich "C:\Program Files\" mit SpecialFolders

Beitrag von ts-soft »

Code: Alles auswählen

Debug GetEnvironmentVariable("ProgramW6432")
:wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Wie ermittle ich "C:\Program Files\" mit SpecialFolders

Beitrag von Sicro »

Danke ts-soft, kann ich sicherlich auch mal gebrauchen.

Habe mich dazu entschieden zusätzlich eine 64-Bit-Version meines Programms anzubieten.
So funktioniert auch der Code des anderen Threads korrekt und es wird nicht herumgetrickst.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Antworten