2013-02-10 7 views

risposta

4

Basta chiamare la funzione API SHGetKnownFolderPath.

Poiché questa funzione è stata aggiunta in Vista, non verrà dichiarata nelle unità della libreria fornite con Delphi 7. Quindi è necessario dichiararla da soli.

type 
    KNOWNFOLDERID = TGuid; 

function SHGetKnownFolderPath(
    const rfid: KNOWNFOLDERID; 
    dwFlags: DWORD; 
    hToken: THandle; 
    out ppszPath: PWideChar 
): HResult; stdcall; external 'Shell32.dll'; 

Ora, dal momento che questa funzione è stata aggiunta in Vista, i tentativi di chiamare su XP porterà a fallimenti. Pertanto, consiglierei di gestirlo utilizzando le funzioni CSIDL anziché le API della cartella nota di Vista.

+0

GUID sono forniti come stringa. Posso usare Stringtoguid per convertire una stringa in GUID e quindi chiamare SHGetKnownFolderPath – user382591

+1

Certo che puoi farlo. –

0

Non si può costruire una matrice di ID di cartella noti e percorsi in quanto non v'è alcuna garanzia i percorsi saranno gli stessi in ogni sistema. Esistono percorsi predefiniti per cartelle note ma sono solo predefiniti, possono essere modificati. Molti ambienti aziendali lo fanno, ad esempio, spostano la cartella documenti dell'utente in una condivisione di rete che può essere sottoposta a backup più facilmente.

In ogni caso un link nel link che hai fornito contiene tutte le informazioni di cui avete bisogno:

SHGetKnownFolderPath è la funzione API Win che restituisce il percorso della cartella nota. Si noti che è necessario rilasciare il puntatore char unicode restituito chiamando CoTaskMemFree.

Se si preferisce utilizzare un oggetto COM, è possibile utilizzare invece IKNOWNFOLDER.