Dans une appli, je donne le choix a l'utilisateur de spécifier un fichier MDB.
il m'est avantageux de le laisser selectionner un raccourcis.
cette petite fonction permet de récupérer le chemin du fichier pointé par le LNK.
Source / Exemple :
Public Function ResolveShortcut(ByRef vsLnkFilePath As String) As String
Dim hFile As Integer
Dim nByteBuffer As Byte
Dim nLongBuffer As Long
Dim nIntBuffer As Integer
Dim nPosFLI As Long '# Position de départ de la FLI (File Location Info)
Dim nOffset_BasePath As Long
Dim nOffset_Network As Long
Dim nOffset_Remaining As Long
hFile = FreeFile
Open vsLnkFilePath For Binary Access Read As hFile
Get hFile, 1, nLongBuffer
'# les fichiers LNK commencent par un 'L'
If nLongBuffer = 76 Then
'# On skippe le GUID
Seek hFile, 21
'# On récupère les flags
Get hFile, , nLongBuffer
'# si la Shell Item ID liste est présente...
If nLongBuffer And 1 Then
Seek hFile, 77
'# On récupère la taille totale de la liste
Get hFile, , nIntBuffer
'# et on décale d'autant le pointeur de lecture.
nPosFLI = 79 + nIntBuffer
Else
nPosFLI = 77
End If
'# On skippe la taille, les flags, et les Local Volume Info
Seek hFile, nPosFLI + 16
'# Offset du chemin, si fichier local
Get hFile, , nOffset_BasePath
'# Offset du repertoire réseau
Get hFile, , nOffset_Network
'# Offset du reste (éventuel) du nom du fichier
Get hFile, , nOffset_Remaining
If nOffset_BasePath Then
Seek hFile, nPosFLI + nOffset_BasePath
Do
Get hFile, , nByteBuffer
If nByteBuffer <> 0 Then
ResolveShortcut = ResolveShortcut & ChrW$(nByteBuffer)
Else
Exit Do
End If
Loop
ElseIf nOffset_Network Then
Seek hFile, nPosFLI + nOffset_Network + &H14
Do
Get hFile, , nByteBuffer
If nByteBuffer <> 0 Then
ResolveShortcut = ResolveShortcut + ChrW$(nByteBuffer)
Else
Exit Do
End If
Loop
ResolveShortcut = ResolveShortcut & "\"
End If
If nOffset_Remaining Then
Seek hFile, nPosFLI + nOffset_Remaining
Do
Get hFile, , nByteBuffer
If nByteBuffer <> 0 Then
ResolveShortcut = ResolveShortcut + ChrW$(nByteBuffer)
Else
Exit Do
End If
Loop
End If
Else
ResolveShortcut = vsLnkFilePath
End If
Close hFile
End Function
Conclusion :
Je sais que des codes existent sur VbFrance, mais cette version ne récupère que ce qui est nécessaire, et ne nécessite pas de dépendance externe (TLB pour IShellLink)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.