Domanda

Dobbiamo ottenere in modo affidabile la cartella Avvio veloce sia per gli utenti Tutti che per quelli Attuali sia in Vista che in XP.Sto sviluppando in C++, ma probabilmente questa è più una domanda generale sull'API di Windows.

Per riferimento, ecco il codice per ottenere la cartella Dati dell'applicazione in entrambi i sistemi:

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

Sospetto che sia solo questione di sapere quale sottocartella utilizza Microsoft.

In Windows XP, la sottocartella dei dati dell'app è:

Microsoft\Internet Explorer\Avvio veloce

Sotto Vista, sembra che la sottocartella sia stata modificata in:

Roaming\Microsoft\Internet Explorer\Avvio veloce

ma vorrei assicurarmi che questo sia il modo corretto per determinare la posizione corretta.

Trovare il corretto il modo per determinare questa posizione è piuttosto importante, poiché fare affidamento su nomi di cartelle codificati quasi sempre si interrompe quando si passa a installazioni internazionali, ecc...Il fatto che la cartella si chiami "Roaming" in Vista mi fa chiedere se ci sia qualche gestione speciale relativa a quella cartella (simile alla cartella Impostazioni locali in XP).

MODIFICARE:Il seguente articolo di MSDN: http://msdn.microsoft.com/en-us/library/bb762494.aspx indica che CSIDL_APPDATA ha un ID equivalente di FOLDERID_RoamingAppData, che sembra supportare l'affermazione di StocksR secondo cui CSIDL_APPDATA restituisce C:\Users\xxxx\AppData oaming, quindi dovrebbe essere possibile utilizzare lo stesso percorso relativo per CSIDL_APPDATA per ottenere l'avvio rapido (\Microsoft\Internet Explorer\Avvio veloce).

Quindi il seguente algoritmo è corretto per 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";

sarebbe anche una buona idea controllare HRES per assicurarsi che la chiamata a SHGetSpecialFolderPath abbia avuto successo.

È stato utile?

Soluzione

AppData su Vista si riferisce a C:\Users\xxxx\AppData oaming e non alla cartella C:\Users\xxxx\AppData stessa.

Anche questo articolo http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept05/hey0901.mspx su un sito microsoft implica che devi semplicemente utilizzare il percorso relativo alla cartella appdata

Altri suggerimenti

Ottima domanda!

Qualunque cosa tu faccia, non cedere alla tentazione di scavare nel registro per trovare queste informazioni!

Inoltre, dobbiamo resistere alla tentazione di codificare in modo rigido qualche percorso, anche parzialmente.Se otteniamo il percorso speciale AppData, quindi aggiungiamo semplicemente una stringa alla fine, questo potrebbe interrompersi in installazioni non statunitensi del software in cui il nome della cartella è localizzato in quella lingua.Per esempio. GetSpecialFolderPath(APP_DATA) + "\\Fonts" non funzionerà su versioni non inglesi di Windows.

Spero che qualcuno abbia la risposta corretta alla tua domanda;Sono curioso di saperlo io stesso!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top