获取WinXP / Vista / 7/8启动文件夹

时间:2012-11-28 23:36:25

标签: delphi delphi-xe3

这适用于Win7 / 8,但不适用于XP,为什么?

// uses shlobj;

function GetSpecialFolderPath(Folder: Integer; CanCreate: Boolean): string;

// Gets path of special system folders
//
// Call this routine as follows:
// GetSpecialFolderPath (CSIDL_PERSONAL, false)
//        returns folder as result
//
var
   FilePath: array [0..255] of char;

begin
 SHGetSpecialFolderPath(0, @FilePath[0], FOLDER, CanCreate);
 Result := FilePath;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   memo1.Lines.Add('path:|'+GetSpecialFolderPath(CSIDL_ALTSTARTUP, false)+'|')
end;

由于

3 个答案:

答案 0 :(得分:1)

0..255太小了。使用MAX_PATH常量。

在Vista中,此文件夹不再存在。我不知道它返回什么(向后兼容的值),但显然它在Vista中缩短了255个字符。

答案 1 :(得分:1)

将此CSIDL_ALTSTARTUP更改为此CSIDL_STARTUP

答案 2 :(得分:1)

我尽量避免编码这些常见的需求。

我在JCL使用此功能:JclSysInfo.GetPersonalFolder;