Convertir un dossier spécial en chemin d'accès

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
eric
Niveau 5
Niveau 5
Messages : 171
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

Convertir un dossier spécial en chemin d'accès

#1

Message par eric » lun. 14 janv. 2019 11:58

Bonjour,

Lorsque l'on utilise la fonction FileSelectFolder sur un dossier spécial de Windows (Mes Documents, Mes images...), la fonction FileSelectFolder ne retourne pas un chemin d'accès classique, mais quelque chose comme :

::{031€4825-7B94-4DC3-B131-E946B44C8DD5}\Documents.library-ms

Existe t il une fonction qui me permettrait de récupérer le chemin d'accès de type C:\Users\user\Documents ?

Merci

Eric

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 744
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: Convertir un dossier spécial en chemin d'accès

#2

Message par DimVar » lun. 14 janv. 2019 15:34

Bonjour,

Tu peux t'inspirer des Macros deja présentes dans le langage.
@AppDataDir Path to current user's Roaming Application Data
@LocalAppDataDir Path to current user's Local Application Data
@DesktopDir Path to current user's Desktop
@MyDocumentsDir Path to My Documents target
@FavoritesDir Path to current user's Favorites
@ProgramsDir Path to current user's Programs (folder on Start Menu)
@StartMenuDir Path to current user's Start Menu
@StartupDir current user's Startup folder
@UserProfileDir Path to current user's Profile folder.



Cdlt, Dimvar.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

eric
Niveau 5
Niveau 5
Messages : 171
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

Re: Convertir un dossier spécial en chemin d'accès

#3

Message par eric » lun. 14 janv. 2019 16:58

Bonjour Dimvar,

Oui, mais comment obtenir le chemin d'accès réel à partir de ce que me retourne Fileselectfolder.

L'idée, c'est qu'au lieu d'avoir ::{031€4825-7B94-4DC3-B131-E946B44C8DD5}\Documents.library-ms je puisse obtenir un chemin du type C:\Users\user\Document pour pouvoir noter ce chemin dans un fichier ou dans une listview par exemple.

Je ne sais pas à l'avance si l'utilisateur va choisir Documents ou Images ou autre chose.

Merci

Eric

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 744
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: Convertir un dossier spécial en chemin d'accès

#4

Message par DimVar » lun. 14 janv. 2019 17:25

En effet, j'ai du répondre un peu rapidement.
C'est un pb de CLSID lié à ta version de Windows. Je t'invite à te rapprocher de la doc où ils précisent ce point.
Un fil anglais sur le sujet abordé :
https://www.autoitscript.com/forum/topi ... ectfolder/
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

eric
Niveau 5
Niveau 5
Messages : 171
Enregistré le : sam. 21 mars 2009 17:57
Localisation : Bretagne
Status : Hors ligne

Re: Convertir un dossier spécial en chemin d'accès

#5

Message par eric » lun. 14 janv. 2019 17:49

Ah ouais, visiblement cela semble plus compliqué que ce que j'avais imaginé.

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11326
Enregistré le : ven. 20 juil. 2007 20:00
Localisation : Bordeaux
Status : Hors ligne

Re: Convertir un dossier spécial en chemin d'accès

#6

Message par Tlem » lun. 14 janv. 2019 22:45

Bonsoir.

Sinon, voici une petite fonction spéciale pour vous. ^^

Code : Tout sélectionner

#include <WinAPIShellEx.au3>

ConsoleWrite(GetRealPath("::{031€4825-7B94-4DC3-B131-E946B44C8DD5}\Documents.library-ms") & @CRLF)
ConsoleWrite(GetRealPath("D:\Users\User\Desktop\Documents.library-ms") & @CRLF)

Func GetRealPath($sPath)
	Local $aPath = StringRegExp($sPath, "({.*})(.*)", 1)
	; Si le chemin n'est pas composé d'un chemin spécial, on retourne le chemin initiale.
	If @Error Then Return $sPath

	; Sinon on retourne le chemin converti
	Return _WinAPI_ShellGetSpecialFolderPath($aPath[0]) &  $aPath[1]
EndFunc
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".

Répondre