大規模な大学のユーザーの 1 人 (おそらく、大学の IT 部門がコンピュータに積極的なセキュリティ設定を行っていると思います) の 1 人が、Windows XP から CSIDL_COMMON_APPDATA または CSIDL_PERSONAL に対して空の文字列が返されます。(彼のコンピューターを調べてソフトウェアのインストール方法を確認していないため、これらのどれが空の文字列を返しているのかわかりませんが、COMMON_APPDATA であると確信しています...)
誰かがこれに遭遇したか、これに対処する方法について提案がありますか?
値を取得するために使用している Delphi コードは次のとおりです。
Function GetSpecialFolder( FolderID: Integer):String;
var
PIDL: PItemIDList;
Path: array[0..MAX_PATH] of Char;
begin
SHGetSpecialFolderLocation(Application.Handle, FolderID, PIDL);
SHGetPathFromIDList(PIDL, Path);
Result := Path;
end; { GetSpecialFolder }
ShowMessage(GetSpecialFolder(CSIDL_COMMON_APPDATA)); <--- This is an empty string
編集:
この API を理解することで、自分のしっぽを追いかけているような気分になりました。この方法とそれに類似した他の方法は、マイクロソフトによって非推奨にされていると言われています (同様に、この質問に対する以前の投稿者 (@TLama?) も、後で投稿を削除しました)。そのステータスを安全に無視します。
私の検索では、これを行う非推奨の方法のサンプルコードを含む、 SO に関する良い答えが見つかりました。