Question

Nous devons obtenir de manière fiable le dossier Lancement rapide pour les utilisateurs All et actuels sous Vista et XP. Je développe en C ++, mais il s’agit probablement d’une question générale concernant les API Windows.

Pour référence, voici le code permettant d’obtenir le dossier Application Data sous les deux systèmes:

    HRESULT hres; 
    CString basePath;
    hres = SHGetSpecialFolderPath(this->GetSafeHwnd(), basePath.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
    basePath.ReleaseBuffer();

Je suppose que c'est simplement une question de savoir quel sous-dossier est utilisé par Microsoft.

Sous Windows XP, le sous-dossier de données de l'application est:

Microsoft \ Internet Explorer \ Lancement rapide

Sous Vista, il semble que le sous-dossier ait été remplacé par:

Itinérance \ Microsoft \ Internet Explorer \ Lancement rapide

mais je voudrais m'assurer que c'est la bonne façon de déterminer le bon emplacement.

Il est très important de trouver le moyen correct de déterminer cet emplacement, car le recours à des noms de dossiers codés en dur rompt presque toujours lorsque vous passez à des installations internationales, etc. Le fait que le dossier est nommé "Itinérance" dans Vista me fait me demander s'il existe une manipulation spéciale liée à ce dossier (semblable au dossier Paramètres locaux sous XP).

EDIT: L'article msdn suivant: http://msdn.microsoft.com/en-us /library/bb762494.aspx indique que CSIDL_APPDATA a un ID équivalent à FOLDERID_RoamingAppData, ce qui semble corroborer l'affirmation de StocksR selon laquelle CSIDL_APPDATA renvoie C: \ Users \ xxxx \ AppData \ Roaming. Il devrait donc être possible d'utiliser le même chemin relatif pour que CSIDL_APPDATA puisse être lancé rapidement (\ Microsoft \ Internet Explorer \ Quick Launch).

Donc, l'algorithme suivant est correct par 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";

Ce serait également une bonne idée de vérifier hres pour vous assurer que l'appel à SHGetSpecialFolderPath a abouti.

Était-ce utile?

La solution

AppData sur vista fait référence à C: \ Users \ xxxx \ AppData \ Roaming et non au dossier C: \ Users \ xxxx \ AppData, il est autonome.

Cet article est également http://www.microsoft. com / technet / scriptcenter / resources / qanda / sept05 / hey0901.mspx sur un site Microsoft implique simplement que vous deviez utiliser le chemin relatif au dossier appdata

Autres conseils

Excellente question!

Quoi que vous fassiez, ne laissez pas tomber la tentation de creusez dans le registre pour trouver cette information!

De plus, nous devons résister à la tentation de coder en dur certains chemins, même partiellement. Si nous obtenons le chemin d'accès spécial AppData, puis ajoutons simplement une chaîne à la fin, cela risque de se produire lors d'installations non américaines du logiciel dont le nom du dossier est localisé dans cette langue. Par exemple. GetSpecialFolderPath (APP_DATA) + "\\ Fonts" ne fonctionnera pas sur les versions non anglaises de Windows.

Espérons que quelqu'un ait la bonne réponse à votre question. Je suis curieux de le savoir moi-même!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top