这适用于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;
由于
答案 0 :(得分:1)
0..255太小了。使用MAX_PATH
常量。
在Vista中,此文件夹不再存在。我不知道它返回什么(向后兼容的值),但显然它在Vista中缩短了255个字符。
答案 1 :(得分:1)
将此CSIDL_ALTSTARTUP更改为此CSIDL_STARTUP
答案 2 :(得分:1)
我尽量避免编码这些常见的需求。
我在JCL使用此功能:JclSysInfo.GetPersonalFolder;