Vista と XP の両方で、すべてのユーザーと現在のユーザーの両方の Quick Launch フォルダーを確実に取得する必要があります。私は C++ で開発していますが、これはおそらく一般的な Windows API に関する質問です。
参考までに、両方のシステムで Application Data フォルダを取得するコードを次に示します。
HRESULT hres;
CString basePath;
hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
basePath.ReleaseBuffer();
これは、Microsoft がどのサブフォルダーを使用しているかを知るだけの問題だと思います。
Windows XP では、アプリ データ サブフォルダーは次のとおりです。
Microsoft\Internet Explorer\クイック起動
Vista では、サブフォルダーが次のように変更されているようです。
Roaming\Microsoft\Internet Explorer\Quick Launch
しかし、これが正しい場所を特定する正しい方法であることを確認したいと思います。
この場所を特定する正しい方法を見つけることは非常に重要です。ハードコードされたフォルダー名に依存すると、国際的なインストールに移行するときにほとんどの場合壊れてしまうためです。Vista でフォルダーの名前が「ローミング」であるという事実は、そのフォルダに関連する特別な処理です (XP の Local Settings フォルダに似ています)。
編集: 次の msdn 記事: http://msdn.microsoft.com/en-us/library/bb762494.aspxは、CSIDL_APPDATA が FOLDERID_RoamingAppData と同等の ID を持っていることを示しています。これは、CSIDL_APPDATA が C:\ を返すという StocksR の主張をサポートしているようです。 Users\xxxx\AppData\Roaming であるため、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";
hres をチェックして、SHGetSpecialFolderPath への呼び出しが成功したことを確認することもお勧めします。