Entwickler-Ecke
Windows API - CSIDL_PROFILES
ASMFreak - Fr 09.07.10 07:51
Titel: CSIDL_PROFILES
Noch'n Moin!
Ich bin heute fleißig!
Bei folgender CSIDL bin ich ratlos, da die Informationen im Netz unterschiedlich sind:
CSIDL_PROFILES
Der Logik nach - es gibt CSIDL_PROFILE (ohne "S"), das den Pfad zum Profil des Users repräsentiert - sollte CSIDL_PROFILES den Pfad repräsentieren, in denen die Benutzerprofile liegen - also den parent path von CSIDL_PROFILE. Das wird auch von einigen Quellen im Netz bestätigt. Microsoft schweigt sich dagegen in der Dokumentation über die Existenz dieser CSIDL aus. Delphi dagegen deklariert die Konstante in ShlObj, sodass sie eine Funktion haben muss. Dennoch führt der Aufruf der betreffenden Funktionen mit dieser CSIDL bei mir nicht zum gewünschten Erfolg. Woran liegt's?
Danke und Gruß, Trutz
Moderiert von
Christian S.: Topic aus Open Source Units verschoben am Fr 09.07.2010 um 09:02
trm - Fr 09.07.10 08:00
Nur als Idee: liegt es vielleicht an Deinen Benutzerrechten, dass es nicht klappt?
ASMFreak - Fr 09.07.10 08:03
Nee, auch als Administrator funktioniert's nicht!
Und apropros:
Der Pfad dahin unterliegt ja keinen Beschränkungen, ich kann den Pfad "C:\Users", der durch CSIDL-PROFILES eigentlich zurückgegeben weden sollte, prima als Nicht-Administrator öffnen.
trm - Fr 09.07.10 09:28
Hm, stimmt.
Bei mir (Win7x64) geht auch nur PROFILE.
Wie ist denn die Deklaration bei den CSIDL, ich habe unter Delphi7 leider keine Werte finden können, dhaer selbst zugewiesen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| const SHGFP_TYPE_CURRENT = 0; CSIDL_PROFILES =$3e; CSIDL_PROFILE= $28; var path: array[0..MAX_PATH] of char; begin
SHGetFolderPath(0, CSIDL_PROFILES, 0, SHGFP_TYPE_CURRENT, @path[0]) ; showmessage(path); end; |
ASMFreak - Fr 09.07.10 09:30
Korrekt!
trm - Fr 09.07.10 11:17
Huhu.
Guck mal, vielleicht hilft Dir das weiter..
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TForm1.Button1Click(Sender: TObject); uses SHFolder;
const SHGFP_TYPE_CURRENT = 0; CSIDL_PROFILES = $3E; CSIDL_PROFILE = $28; var path: array[0..MAX_PATH] of char; x: integer; Dummy_String,Hex_String: string; begin
memo1.Clear; for x := 0 to 10240 do begin SHGetFolderPath(0, x, 0, SHGFP_TYPE_CURRENT, @path[0]); Dummy_String := path; if length(trim(Dummy_String)) > 0 then Memo1.lines.Add(format('%d ($%s) -> %s', [x, IntToHex(x,100),Dummy_String])); path[0] := #0; if x mod 25 = 0 then Application.Processmessages; end;
end; |
1 Memo wird benötigt und 1 Button.
Komischerweise werden NUR beim ermitteln der Pfade unter Windows7x64 auf meinem Desktop 2 Dateien erstellt: Desktop.ini (einmal im echten Pfad und 1x sonstwo).
ASMFreak - Fr 09.07.10 12:23
Nee, nicht wirklich: zwischen $3B und $100 klafft eine ziemliche Lücke ...
Ich hab mich also damit abgefunden, dass es nicht geht. Ist ja auch egal, wenn man's braucht, kann man einfach über CSIDL_PROFILE (ohne s ) gehen und das letzte SubDir entfernen ..
Dachte bloß, jemand weiß vielleicht Genaueres.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!