Seite 1 von 1

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

Verfasst: 31.12.2010 18:34
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

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

Verfasst: 31.12.2010 18:42
von ts-soft

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

Verfasst: 31.12.2010 19:53
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.

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

Verfasst: 31.12.2010 20:14
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.

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

Verfasst: 31.12.2010 20:57
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

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

Verfasst: 02.01.2011 01:55
von ts-soft

Code: Alles auswählen

Debug GetEnvironmentVariable("ProgramW6432")
:wink:

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

Verfasst: 02.01.2011 17:33
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.