Pour mon programme, j'avais besoin d'extraire le chemin complet d'un programme depuis un lien (fichier .lnk)
Après une journée de recherche, je ne suis tombé que sur des exemples vieux de 10 ans (et qui ne fonctionnent plus), ou avec des messages d'erreur auquel je ne comprend rien (j'aime pas les pointeurs, et autre trucs corrosifs)
Donc, j'ai exploré "à l'ancienne" (= avec un éditeur hexa) des fichiers lien, puis une fois repéré que le chemin apparait d'une claire (tous les caractères sont contigus), j'ai sorti ma tronçonneuse automatique préférée: les expressions régulières.
Il suffit simplement de chercher ce qui commence par A à Z suivi de : puis \ puis tous les caractères autorisés
Petit exemple qui extrait tous les chemins complet des liens sur le bureau Windows
Code : Tout sélectionner
; Extraction du chemin programme d'un fichier .lnk
; (C)Marc56 - md.acme.software@gmail.com - 2015-11-27
RegEx.s = "^[A-Z]\:\\[\w\d\:\\\s\.()\-]+"
Source_Dir.s = GetHomeDirectory() + "Desktop\"
If Not CreateRegularExpression(1, RegEx)
Debug "Expression régulière inutilisable. Bye."
EndIf
If ExamineDirectory(0, Source_Dir, "*.lnk")
While NextDirectoryEntry(0)
If DirectoryEntryType(0) =#PB_DirectoryEntry_File
File_Name.s = DirectoryEntryName(0)
If ReadFile(2, Source_Dir + File_Name)
While Eof(2) = 0
Txt.s = ReadString(2)
If MatchRegularExpression(1, Txt)
Debug RSet(File_Name, 50, ".") + " > [" + Txt + "]"
EndIf
Wend
CloseFile(2)
EndIf
EndIf
Wend
FinishDirectory(0)
EndIf
Chez moi ça marche (mais je n'ai peut être pas tous les types de noms de fichier sur mon bureau)
Je vais intégrer ça dans la prochaine version de mon Desk pour pouvoir faire un DnD des liens.