Browse Source

+ Added for D6/7 compatibility. And it _is_ useful ;)

michael 21 years ago
parent
commit
c7b78eb610
1 changed files with 76 additions and 0 deletions
  1. 76 0
      rtl/win32/shfolder.pp

+ 76 - 0
rtl/win32/shfolder.pp

@@ -0,0 +1,76 @@
+{ ---------------------------------------------------------------------
+  shfolder.dll is distributed standard with IE5.5, so it should ship 
+  with 2000/XP or higher but is likely to be installed on NT/95/98 or 
+  ME as well.  It works on all these systems.
+  
+  The info found here is also in the registry:
+  HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\ 
+  HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\ 
+  
+  Missing from shfolder.dll are:
+    Desktop
+    Favorites
+    NetHood
+    Printhood
+    Recent
+    Sendto
+    Startup
+    Start menu
+    Templates
+  These are present in the registry, though.
+  ---------------------------------------------------------------------}
+
+Unit shfolder;
+
+Interface
+
+Uses
+  windows;
+
+Const
+  LibName = 'SHFolder.dll';
+
+Const
+  CSIDL_PERSONAL             = $0005; { %USERPROFILE%\My Documents }
+  CSIDL_APPDATA              = $001A; { %USERPROFILE%\Application Data (roaming) }
+  CSIDL_LOCAL_APPDATA        = $001C; { %USERPROFILE%\Local Settings\Application Data (non roaming) }
+  CSIDL_INTERNET_CACHE       = $0020; { %USERPROFILE%\Local Settings\Temporary Internet Files}
+  CSIDL_COOKIES              = $0021; { %USERPROFILE%\Cookies}
+  CSIDL_HISTORY              = $0022; { %USERPROFILE%\Local settings\History}
+  CSIDL_COMMON_APPDATA       = $0023; { %PROFILESPATH%\All Users\Application Data }
+  CSIDL_WINDOWS              = $0024; { %SYSTEMROOT% }
+  CSIDL_SYSTEM               = $0025; { %SYSTEMROOT%\SYSTEM32 (may be system on 95/98/ME) }
+  CSIDL_PROGRAM_FILES        = $0026; { %SYSTEMDRIVE%\Program Files }
+  CSIDL_MYPICTURES           = $0027; { %USERPROFILE%\My Documents\My Pictures }
+  CSIDL_PROGRAM_FILES_COMMON = $002b; { %SYSTEMDRIVE%\Program Files\Common }
+  CSIDL_COMMON_DOCUMENTS     = $002e; { %PROFILEPATH%\All Users\Documents }
+  CSIDL_COMMON_ADMINTOOLS    = $002f; { %PROFILEPATH%\All Users\Start Menu\Programs\Administrative Tools }
+  CSIDL_ADMINTOOLS           = $0030; { %USERPROFILEPATH%\<user name>\Start Menu\Programs\Administrative Tools }
+
+  CSIDL_FLAG_CREATE          = $8000; { (force creation of requested folder if it doesn't exist yet) }
+
+{ Original entry points }
+
+Function SHGetFolderPathA(Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall; external LibName name 'SHGetFolderPathA';
+Function SHGetFolderPathW(Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall; external LibName name 'SHGetFolderPathW';
+
+Function SHGetFolderPath (Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall; external LibName name 'SHGetFolderPathA';
+
+
+{ For Delphi compatibility }
+
+type
+  PFNSHGetFolderPathA = Function(Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall;
+  PFNSHGetFolderPathW = Function(Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall;
+  PFNSHGetFolderPath = PFNSHGetFolderPathA;
+
+  TSHGetFolderPathA = PFNSHGetFolderPathA;
+  TSHGetFolderPathW = PFNSHGetFolderPathW;
+  TSHGetFolderPath = TSHGetFolderPathA;
+
+implementation
+
+const
+  SHFolderDll = 'SHFolder.dll';
+
+end.