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

そのような一般的なニーズをコーディングすることは避けようとしています。

私は JCL からこの関数を使用します: JclSysInfo.GetPersonalFolder ;

于 2012-11-29T11:18:33.347 に答える
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 に答える