VistaとXPの両方で、すべてのユーザーと現在のユーザーの両方に対してクイック起動フォルダを確実に取得する必要があります。私はC++で開発していますが、これはWindows APIの一般的な質問です。私は、これはサブフォルダMicrosoftが使用する知っているだけの問題である疑いがあるXPとVistaでQuick Launchフォルダを確実に取得するにはどうすればよいですか?
HRESULT hres;
CString basePath;
hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
basePath.ReleaseBuffer();
:
は参考のため、ここでは両方のシステムの下で、Application Dataフォルダを取得するためのコードです。 Windows XPでは、アプリのデータサブフォルダの下
がある:Vistaで
のMicrosoft \ Internet Explorerの\クイック起動
、サブフォルダに変更されたことが表示されます:ローミング
\ Microsoft \ Internet Explorer \ Quick Launch
しかし、これが正しい場所を判断する正しい方法であることを確認したいと思います。 ...など、あなたが国際的なインストールに移動すると、ほとんどの場合、ハードコーディングされたフォルダ名を頼ることは壊れるとしてこの場所を決定する正しい方法は、非常に重要であるフォルダがで「ローミング」という名前が付けられているという事実を発見
Vistaでは、そのフォルダに関連する特別な処理があるかどうか疑問に思う。(XPのLocal Settingsフォルダに似ている)
EDIT: 次のMSDNの記事:\ Users \ユーザーXXXX \のAppData \ローミング、それは可能なはずですので:http://msdn.microsoft.com/en-us/library/bb762494.aspxはCSIDL_APPDATAはCを返しないことStocksRの主張を支持しているように見えるんどの、CSIDL_APPDATAはFOLDERID_RoamingAppDataの同等のIDを持っていることを示していますCSIDL_APPDATAの同じ相対パスを使用してクイック起動(\ Microsoft \ Internet Explorer \ Quick Launch)を取得します。
したがって、次のアルゴリズムは、MSごとに正しいです:
HRESULT hres;
CString basePath;
hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
basePath.ReleaseBuffer();
CString qlPath = basePath + "\\Microsoft\\Internet Explorer\\Quick Launch";
、また、SHGetSpecialFolderPathの呼び出しが成功したことを確認するためにHRESをチェックするために良いでしょう。