Einzelnen Beitrag anzeigen

Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#1

Problem mit ShellFolder -> CSIDL_APPDATA; CSIDL_LOCAL_AP

  Alt 12. Aug 2005, 23:05
Problem mit ShellFolder -> CSIDL_APPDATA und CSIDL_LOCAL_AP liefern beide nur den Anwendungsdaten-Ordner des angemeldeten Users...

Ich verwende folgende Funktion (ist eigentlich von Luckie );
Delphi-Quellcode:
  function GetShellFolder(CSIDL: integer): string;
  var
    pidl: PItemIdList;
    FolderPath: string;
    SystemFolder: Integer;
  begin
    SystemFolder := CSIDL;
    if SUCCEEDED(SHGetSpecialFolderLocation(0, SystemFolder, pidl)) then
    begin
      SetLength(FolderPath, max_path);
      if SHGetPathFromIDList(pidl, PChar(FolderPath)) then
      begin
        SetLength(FolderPath, strlen(PChar(FolderPath)));
      end;
    end;
    Result := FolderPath;
  end;
BEIDE Aufrufe, liefern mir den lokalen Application Pfad:
Delphi-Quellcode:
GetShellFolder(shlobj.CSIDL_APPDATA);
GetShellFolder(shlobj.CSIDL_LOCAL_APPDATA);
Momentan habe ich folgenden Workaround:
Delphi-Quellcode:
...
  function GetUser: string;
  var
    Buffer: array[0..MAX_COMPUTERNAME_LENGTH + 1] of Char;
    Size: DWord;
  begin
    Size := Pred(SizeOf(Buffer));
    Windows.GetUserName(Buffer, Size);
    Result := StrPas(Buffer);
  end;
begin
  Result := GetShellFolder(CSIDL_APPDATA);
  Result := StringReplace(Result, '\' + GetUser + '\', '\All Users\', []);
...
Ich wüsse allerdings schon ganz gern, wo der eigentliche Fehler ist... Ich kann mir kaum vorstellen, dass hier die API selbst fehlerhaft ist, dann wohl eher die entspr. Kapselung in Delphi.
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat