CSIDL_BITBUCKET 回收站
CSIDL_CONTROLS 控制面板
CSIDL_DESKTOP Windows桌面desktop;
CSIDL_DESKTOPDIRECTORY desktop的目录;
CSIDL_DRIVES 我的电脑
CSIDL_FONTS 字体目录
CSIDL_NETHOOD 网上邻居
CSIDL_NETWORK 网上邻居virtual folder
CSIDL_PERSONAL 我的文档
CSIDL_PRINTERS 打印机
CSIDL_PROGRAMS 程序组
CSIDL_RECENT 最近打开文档
CSIDL_SENDTO 发送到菜单项
CSIDL_STARTMENU 快启菜单
CSIDL_STARTUP 启动目录
CSIDL_TEMPLATES 临时文档
function TfrmMain.GetCurrentPath : string;
const
GXEPath = 'GXExplorer';
ShellFolderKey='\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders';
var
AppDataPath,FullPath:string;
Buffer:array[0..MAX_PATH] of Char;
Malloc:IMalloc;
PIDL : PItemIDList;
DefaultPath : Boolean;
begin
AppDataPath :='';
FullPath :='';
DefaultPath := False;
// 使用API得得到路径
if Succeeded((SHGetSpecialFolderLocation(0,CSIDL_DESKTOP,PIDL))) then
if (SHGetPathFromIDList(PIDL,Buffer)) then
if Succeeded(SHGetMalloc(Malloc)) then
try
AppDataPath := Buffer;
finally
Malloc.Free(PIDL);
Malloc := nil;
end;
// API failed, so try to get path using registry
if AppDataPath = '' then
with {$IFDEF VER130}
TRegistry.Create(KEY_READ){$ELSE}TRegistry.Create{$ENDIF} do
if OpenKey(ShellFolderKey, False) then
AppDataPath := ReadString('AppData');
// Registry failed, so default to installation folder (no per-user settings)
if AppDataPath = '' then
begin
AppDataPath := ExtractFileDir(ParamStr(0));
DefaultPath := True;
end;
if not DefaultPath then FullPath := AppDataPath + GXEPath else
FullPath := AppDataPath;
if not DirectoryExists(FullPath) then
if not CreateDir(FullPath) then
FullPath := ExtractFileDir(ParamStr(0));
Result := FullPath;
end;