Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   SHGetSpecialFolderLocation mit CSIDL_PROFILES (https://www.delphipraxis.net/57368-shgetspecialfolderlocation-mit-csidl_profiles.html)

Sharky 20. Nov 2005 07:11


SHGetSpecialFolderLocation mit CSIDL_PROFILES
 
Hai ihr,

bekommt einer von euch den Pfad zu CSIDL_PROFILES mit diesem Code:
Delphi-Quellcode:
uses
  ShlObj;

function GetShellFolder(CSIDL: integer): string;
var
  pidl: PItemIdList;
  FolderPath: string;
  SystemFolder: integer;
begin
  FolderPath := '';
  SystemFolder := CSIDL;
  if SUCCEEDED(SHGetSpecialFolderLocation(0, SystemFolder, pidl)) then
  begin
    SetLength(FolderPath, MAX_PATH);
    SHGetPathFromIDList(pidl, PChar(FolderPath));
    SetLength(FolderPath, lstrlen(PChar(FolderPath)));
  end;
  Result := FolderPath;
end;
Eigentlich sollte als Result der Pfad zu dem Profileordner kommen. Bei mir scheitert es aber immer bei SHGetSpecialFoler.... Das SUCCEEDED liefert da schon ein False.

Mit ist nicht ganz klar was MS damit meint das dies erst aber Version 6.0 gehen soll. Von was soll es den Version 6.0 sein?

Edit: Habe mal ganz heimlich ein i in ein o geändert :stupid:

himitsu 20. Nov 2005 07:33

Re: SHGetSpecialFolderLocation mit CSIDL_PROFILES
 
Mein D7 und D2005 kennen als erstes schonmal CSIDL_PRIFILES nicht ;), aber auch CSIDL_PROFILES ist denen unbekannt.

Und Ja, es scheint so, als wenn mein WinXP das $003e noch nicht unterstützt und auch wenn ich es jetzt nicht testen kann, so kann ich dennoch bestätigen, das Win2K das auch nicht kennt ^^

[add]
Eventuell reicht es dir ja, wenn du CSIDL_PROFILE ($0028) verwendest und dort einfach nur den UserPfad entfernst?

Sharky 20. Nov 2005 07:37

Re: SHGetSpecialFolderLocation mit CSIDL_PROFILES
 
Hai Foren-Engel,

was meinst Du denn mit CSIDL_PRIFILES *g*
Zitat:

Zitat von himitsu
..Eventuell reicht es dir ja, wenn du CSIDL_PROFILE ($0028) verwendest und dort einfach nur den UserPfad entfernst?

Jup. Das kann ich natürlich machen. Ich bin nur beim lesen der ganzen CSIDL_* über diese gestolpert und wollte es mal testen.

himitsu 20. Nov 2005 07:45

Re: SHGetSpecialFolderLocation mit CSIDL_PROFILES
 
Ich hab damals auch so 'ne Liste gefunden (vor 'nem Jahr, oder so) und weil dort auch einiges nicht ging, hab ich mal bei SHGetSpecialFolderLocation über 'ne Schleife testen lassen ob und was bei welchen Werten vorhanden ist und damals ging es nur bis CSIDL_COMMON_FAVORITES ($001C) bei Win2K.

Eventuell sind das ja auch nur die Werte für/ab Vista :gruebel:

Christian Seehase 20. Nov 2005 16:14

Re: SHGetSpecialFolderLocation mit CSIDL_PROFILES
 
Moin Sharky,

beim ersten Eintrag in der CSIDL-Liste steht ein Link bei "Version 5.0".
Es geht um die Versionen von SHELL32.DLL, SHLWAPI.DLL und COMCTL32.DLL.
Version 6.0 sollte bei XP mit IE 6 vorhanden sein (warum bei mir jetzt 5.82 der ComCtl32 installiert ist weiss ich allerdings auch nicht ;-))

Seltsamerweise ist die Konstante CSIDL_PROFILES in SHLOBJ.H nicht deklariert :gruebel:

Sharky 20. Nov 2005 17:19

Re: SHGetSpecialFolderLocation mit CSIDL_PROFILES
 
Zitat:

Zitat von Christian Seehase
... (warum bei mir jetzt 5.82 der ComCtl32 installiert ist weiss ich allerdings auch nicht) ...

Hai Christian,

bei mir ist es auch die Dateiversion "5.82 (xpsp_sp2_rtm.040803-2158)" bei der Produktverion steht dann aber "6.00.2900.2180"

Rätsel über Rätsel.

himitsu 20. Nov 2005 17:34

Re: SHGetSpecialFolderLocation mit CSIDL_PROFILES
 
hmmm
unter system32 hab ich auch 'ne 5.82.2600.0, aber unter WinSxS\x86_Microsoft.Windows.Common-Controls_... liegt eine 6.0.2600.0 :gruebel:

Christian Seehase 20. Nov 2005 17:56

Re: SHGetSpecialFolderLocation mit CSIDL_PROFILES
 
Moin Sharky,

für den angegebenen Fall müsste aber die Shell32.dll-Version ausschlaggebend sein :gruebel:
Wenn Du mal den Rückgabewert der Funktion auswertest (nicht nur auf Succeeded prüfen) kommt als Ergebnis: Falscher Parameter.

BTW:
Im Erfolgsfalle müsstest Du auch noch den durch pidl belegten Speicher wieder freigeben.

@Himitsu:
Sieht bei mir genauso aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz