1

这适用于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;

谢谢

4

3 回答 3

1

将此 CSIDL_ALTSTARTUP 更改为此 CSIDL_STARTUP

于 2012-11-29T00:00:45.490 回答
1

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

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

于 2012-11-28T23:40:08.243 回答
1

我尽量避免对这种常见的需求进行编码。

我使用 JCL 的这个函数:JclSysInfo.GetPersonalFolder

于 2012-11-29T11:18:33.347 回答