delphi obtenir chemin d'accès au dossier
Je travaille avec Delphi 7 et je veux trouver le chemin de mon .. /Tous les Utilisateurs/Documents répertoire.
Je suis tombé sur le code suivant
uses shlobj, ...
function GetMyDocuments: string;
var
r: Bool;
path: array[0..Max_Path] of Char;
begin
r := ShGetSpecialFolderPath(0, path, CSIDL_Personal, False) ;
if not r then
raise Exception.Create('Could not find MyDocuments folder location.') ;
Result := Path;
end;
Il fonctionne très bien mais il ne prend pas en charge CSIDL_COMMON_DOCUMENTS
qui retourne le chemin d'accès souhaité.
En outre, comme par MS CSIDL ne devrait plus être utilisée au lieu d'utiliser KNOWNFOLDERID .
Et je n'ai besoin de travailler cette application sur plusieurs OS (windows uniquement).
Comment puis-je faire cela ?
L'aide est apprécié 🙂
OriginalL'auteur Shirish11 | 2012-01-03
Vous devez vous connecter pour publier un commentaire.
À mon avis, il n'y a rien de mal avec l'appel de
SHGetSpecialFolderPath
passantCSIDL_COMMON_DOCUMENTS
. Si vous avez besoin de support XP, alors vous ne pouvez pas utiliser connue dossier Id. Vous pouvez écrire du code qui utilisé connue dossier Id sur Vista, et jusqu', et retomba à CSIDL sur les systèmes antérieurs. Mais pourquoi s'embêter? MS ont fait pour vous avecSHGetSpecialFolderPath
.CSIDL_COMMON_DOCUMENTS
décélération dans monShlobj.pas
fichier.Il a de la valeur $002E, vous aurez à déclarer la constante dans votre code
OriginalL'auteur David Heffernan
N'êtes-vous pas censé utiliser ShGetFolderPath de shell32.dll? Cela suppose l'utilisation de windows 2000 avec IE5 ou plus récent.
vous devez ajouter
shlobj
pour les utilisations en ligne pour le code qui permet de l'utiliser.Comme il n'y a pas de définition pour SHGetFolderPath dans la source, vous pouvez utiliser les informations suivantes avant le code qui l'utilise:
Delphi 7 ne pas faire usage de la version Large de la routine, de sorte que vous pouvez utiliser ce code.
shlobj
dans ma clause utilise et je ne peux pas trouverShGetFolderPath
en Delphi 7.Ah, ShGetFolderPath est plus récente que la votre .dcu - je vais mettre à jour la réponse à une modification de votre fichier qui devrait lui permettre de travailler
OriginalL'auteur Petesh
Que David a déjà indiqué, l'utilisation de la SHGetSpecialFolderPath) de la fonction.
Vista et W7 va faire le CSIDL/Dossier de conversion pour vous.
Si vous souhaitez utiliser la nouvelle API, Cela devrait le truc:
Veuillez noter que cela ne fonctionnera qu'à partir de vista.
OriginalL'auteur whosrdaddy
Comme recommandé par Embarcadero dans cette doc: VistaUACandDelphi.pdf
L'utiliser comme ceci:
OriginalL'auteur Rigel