特別なシェルフォルダ
Windowsにはいくつかの特別なシェルフォルダというのがあります。「デスクトップ」であったり、「マイ ドキュメント」であったり、「お気に入り」であったり。その中でも、「アプリケーションデータ」というのがあるのですが、SoundEngineでそこを使えるような仕組みも取り入れていこうかと思いまして取り上げてみます。
昔から初期化ファイルなりそういったものをどこに配置するかというのは問題でした。実行ファイルと一緒の場合Program Filesに置くと不都合がでてしまいすし(一般ユーザーで使おうとすると)、レジストリに置くとレジストリが汚れてしまうことになります。それを解決する一つの手が、このアプリケーションデータというフォルダかなと。
アプリケーションデータ
このアプリケーションデータというフォルダは、IE4.0以上が対象ということで昨今のコンピュータでは使っても特に問題ないような気はします。SHGetSpecialFolderPath自体は、Windows 98から使えるもののようです。
使う方法としては、#include <shlobj.h>と#pragma comment( lib, “shell32.lib” )でしょうか。shell32.libを入れずにビルドしようとすると「error LNK2001: 外部シンボル “__imp__SHGetSpecialFolderPathA@16” は未解決です。」というエラーが出るようです。(スタティックでMFCをリンクする場合)プログラムとしては、こんな感じですね。最後のTRUEでフォルダがない場合に作成してくれるようです。
1 2 3 4 5 6 7 8 9 |
TCHAR path[ _MAX_PATH ]; SHGetSpecialFolderPath ( NULL, path, CSIDL_APPDATA, TRUE ); |
こんな感じで試してみたところ、MeやXPではちゃんとパスが帰ってきましたが、98ではどうやら帰ってこないようでした。まだちょっと研究が必要か?
方針
とはいえこれをどうSoundEngineにいかすかは難しいところです。作業フォルダに入ってるファイルあたりから適応して行こうかなぁと思っていますが。理想的には、一時的に使うものはTempフォルダ、ファイルが変更しないものを実行フォルダ、その他をアプリケーションフォルダみたい形で配置したいところですが。2.98系で検討してみようかと思います。