ほとんどのWindowsアプリケーションと同様に、ユーザーの「ローカルアプリケーションデータ」フォルダにデータを読み書きするDelphi6アプリケーションがあります。以下のコードを使用して、そのフォルダーを判別します。これまで、そのコードはほとんどのユーザーに有効でした。ローカルアプリケーションデータが予期されたフォルダーにないユーザーに遭遇しました:
C:\Users\Bob\AppData\Roaming\
通常、ローカルアプリのデータフォルダーは次のように解決されます。
C:\Documents and Settings\Bob\Application Data\
このユーザーの特定の状況で奇妙なのは、通常HKEY_LOCAL_MACHINEにあるいくつかのレジストリキーが実際にはHKEY_CURRENT_USERにあることです。それらはWindows7で実行されています。
より良い言葉がないために、ユーザーの「真の」アプリケーションデータを取得して、この状況をより適切にナビゲートできるようにする方法はありますか?CSIDL_APPDATA、CSIDL_COMMON_APPDATA、およびCSIDL_LOCAL_APPDATAの特別なフォルダーからインテリジェントに選択することが問題である場合、そのためのロジックは何ですか?お分かりのように、ユーザーが実行しているWindowsのバージョンや特定のPC構成に関係なく、正しいアプリケーションデータフォルダーを根絶できる汎用機能を探しています。
答えがあるように見えるこのStackOverflowの投稿を見つけましたが、.NETライブラリの関数を使用しており、Delphi 6を使用しています。このソリューションが私の質問に答える場合、誰かがDelphiでそれを複製する簡単な方法を教えてもらえますか?
現在のユーザーの「アプリケーションデータ」フォルダのパスを取得するにはどうすればよいですか?
// Function to get the app data special folder.
function GetAppdataFolder: string;
begin
Result := GetSpecialFolderLocation(CSIDL_APPDATA);
end;