1

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 への呼び出しが成功したことを確認することもお勧めします。

4

2 に答える 2

2

Vista の AppData は、C:\Users\xxxx\AppData\Roaming を参照し、C:\Users\xxxx\AppData フォルダー自体ではありません。

また、Microsoft サイトのこの記事http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept05/hey0901.mspxは、単に appdata フォルダーへの相対パスを使用する必要があることを意味します。

于 2008-09-16T19:54:15.907 に答える
1

素晴らしい質問です。

何をするにしても、レジストリを掘り下げてこの情報を見つけようとする誘惑に負けないでください。

また、一部のパスを部分的にでもハードコーディングする誘惑に抵抗する必要があります。特別な AppData パスを取得し、最後に文字列を追加するだけで、フォルダー名がその言語にローカライズされているソフトウェアの米国以外のインストールでは、これが機能しなくなる可能性があります。たとえばGetSpecialFolderPath(APP_DATA) + "\\Fonts"、英語版以外の Windows では動作しません。

うまくいけば、誰かがあなたの質問に対する適切な答えを持っています。自分で知りたい!

于 2008-09-16T20:02:28.290 に答える