Autor Beitrag
ASMFreak
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 9



BeitragVerfasst: Fr 09.07.10 07:51 
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 user profile iconChristian S.: Topic aus Open Source Units verschoben am Fr 09.07.2010 um 09:02

_________________
Und aus dem Chaos sprach eine Stimme zu mir: Lächle und sei froh, es könnte schlimmer kommen.
Und ich lächelte und ich war froh – und es kam schlimmer!
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Fr 09.07.10 08:00 
Nur als Idee: liegt es vielleicht an Deinen Benutzerrechten, dass es nicht klappt?

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
ASMFreak Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 9



BeitragVerfasst: 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.

_________________
Und aus dem Chaos sprach eine Stimme zu mir: Lächle und sei froh, es könnte schlimmer kommen.
Und ich lächelte und ich war froh – und es kam schlimmer!
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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:

ausblenden 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;

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
ASMFreak Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 9



BeitragVerfasst: Fr 09.07.10 09:30 
Korrekt!

_________________
Und aus dem Chaos sprach eine Stimme zu mir: Lächle und sei froh, es könnte schlimmer kommen.
Und ich lächelte und ich war froh – und es kam schlimmer!
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Fr 09.07.10 11:17 
Huhu.

Guck mal, vielleicht hilft Dir das weiter..


ausblenden 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).

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)

Für diesen Beitrag haben gedankt: ASMFreak
ASMFreak Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 9



BeitragVerfasst: 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.

_________________
Und aus dem Chaos sprach eine Stimme zu mir: Lächle und sei froh, es könnte schlimmer kommen.
Und ich lächelte und ich war froh – und es kam schlimmer!