begin process at 2012 02 16 22:39:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > RECUPERER LE FICHIER POINTÉ PAR UN RACCOURCIS

RECUPERER LE FICHIER POINTÉ PAR UN RACCOURCIS


 Information sur la source



 Description

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

  • 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
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)


 Sources du même auteur

Source avec Zip Source avec une capture ENUMERATION DES PORTS TCP ET IDENTIFCATION DU PROCESS (PID) ...
Source avec Zip Source avec une capture JSON PARSER - ANALYSE DE CHAINES JSON
Source avec Zip Source avec une capture MODULE DE TÉLÉCHARGEMENT DE FICHIER BASIQUE (SYNCHRONE / ASY...
Source avec Zip COURS DE PILOTAGE........D'APPLICATIONS
Source avec Zip CSOCKET - REMPLACEZ WINSOCK PAR LA VERSION 2 DES API

 Sources de la même categorie

Source avec Zip Source avec une capture AUTORISER/REFUSER L'EXECUTION DE PROCESSUS par pierreh51
Source avec Zip Source .NET (Dotnet) CLONE/FORK DES FLUX DE LA CONSOLE : PERMETTRE LA REDIRECTION... par ShareVB
Source avec Zip Source .NET (Dotnet) DÉFRAGMENTER UN FICHIER par ShareVB
Source avec Zip Source .NET (Dotnet) ECRAN DE VEILLE : DÉTECTER LE LANCEMENT/DÉCLENCHER/EMPÊCHER par ShareVB
Source avec Zip Source avec une capture DESACTIVER / ACTIVER LES MISES EN VEILLES PC par Arsena

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture [VBS] SHORTCUTREMOVER OUTIL POUR SUPPRIMER AUTOMATIQUEMENT L... par hackoo
Source avec Zip Source avec une capture BART VOTRE BUREAU DANS UNE BARRE par alfamick
Source avec Zip Source avec une capture CONTRÔLE LINKLABEL (SYSLINK) HYPERTEXT par Charles Racaud
Source avec Zip Source avec une capture Source .NET (Dotnet) MONIPWEB V1.0 - RÉCUPERER SON ADRESSE IP WEB, INTERNET EN VI... par TonySoft
Source avec Zip Source avec une capture Source .NET (Dotnet) LE DÉFLÈCHEUR par dheroux

Commentaires et avis

Commentaire de EBArtSoft le 07/09/2006 19:20:00 administrateur CS

Codyx.org ? ;)

Commentaire de BruNews le 07/09/2006 19:33:03 administrateur CS

Ah mais c'est bien ça, je n'avais jamais perdu de temps à fouiller l'intérieur d'un lnk vu que IShellLink en C va impec.
Vais essayer de remettre ça en C, si prob de compréhension de ton VB, je demanderai.

Commentaire de EBArtSoft le 07/09/2006 20:11:19 administrateur CS

BruNews> Tu trouveras un jolie PDF la dessus ici
=> http://www.wotsit.org/download.asp?f=shortcut

@+

Commentaire de BruNews le 07/09/2006 20:36:33 administrateur CS

IMPEC, merci.

Commentaire de Renfield le 07/09/2006 22:14:50 administrateur CS

je l'ai "Snippeté" en même temps ^^

pour la doc, je suis parti du même fichier (vive wotsit)

Commentaire de MadM@tt le 08/09/2006 15:30:23

www.wotsit.org > génial ce site c'est trop le genre d'infos que je galère à trouver
Sinon logiquement, il serait possible de trouver toutes les infos d'un raccourci en procédant pareil ? (histoire de se passer de IShellLink) En tout cas ce code est déjà bien pratique ^^

Commentaire de Renfield le 08/09/2006 15:42:11 administrateur CS

possible, oui, mais je ne vais pas m'y coller.

pas un ersatz de flemme, mais je vais finallement surement passer par IShellLink, car certains raccourcis sont mal analysés (Office 2003, par exemple)...

en même temps, l'info sur wotsit n'est pas une info officielle, et elle date un peu.

Commentaire de EBArtSoft le 08/09/2006 16:27:46 administrateur CS

De plus MS a bien spécifier qu'il ne fallait s'attarder sur le format des LNK car il change a chaque version de windows. Autant utiliser IShellLink qui est libre et restera totalement compatible.

@+

Commentaire de bidouille007 le 14/09/2009 00:17:05

Bonsoir

Cette source m'intéresse mais hélas en la copiant dans mon projet j'ai beaucoup d'erreur.

Je pense que ce code est pour VB et pas pour VB NET 2008

Renfield y a pas moyen d'en avoir une adaptation.

J'essaye tout simplement de récupérer la cible contenu dans le fichier LNK et pour l'instant je tourne en rond.

J'ai essayé d'utiliser en faisant imports shell32 pour avoir  Dim MonRaccourci_obj As ShellLinkObject mais je n'ai pas trouvé comment affecté l'emplacement du fichier LNK à l'objet pour l'ouvrir et récupérer la cible contenu dans le fichier.

Merci de votre aide en VB NET

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Recuperer le N° ID de Windows [ par kamkam ] Comment récupérer le n° id du type (xxxx-OEM- . . . .) de WindowsMerci COMMENT CREER DES RACCOURCIS ? [ par CMR ] salut,je cherche un moyen pour creer des raccourcis depuis vb6: on fourni le chemin de l'executable et le prog cree le racourcis sur le bureauMerci recuperer le nom du repertoire courant [ par tobby ] Comment recuperer le path du repertoire dans lequel a ete copie le .exe? Recuperer liens d'un WebBrowser [ par flo ] SalutPeut on recuperer les liens cliqués par l'usr dans un WebBrowser ( je voudrai creer un historique des liens selectionnes en vb)Merci d'avance comment recuperer le path du repertoire courant [ par rod ] je cherche a recuperer le path du repertoire ou s'execute mon prog,pour gerer les fichiers j'utilise FileSystemObjectmerci d'avance adresse ip internet [ par jpz ] comment est-ce que je peux recuperer dans vb mon adresse ip internet (pas mon IP locale)mon ip locale est 10.0.0.1moi je voudrais recuperer l'IP qui m Recuperer le nom du fichier que l'on execute [ par Neurolog ] Je voudrais savoir si on peut recupérer le nom du fichier que l'on est en train d'éxécuter! Filesearch et Raccourcis [ par JP ] Salut à tous,Est ce que l'un d'entre vous peux me dire comment avoir le nom raccourcis avec la fonction filesearch.D'après ce qui m'est arrivé cette f Filesearch et Raccourcis [ par JP ] Salut à tous,Est ce que l'un d'entre vous peux me dire comment avoir le nom raccourcis avec la fonction filesearch.D'après ce qui m'est arrivé cette f Urgent...Arriver a recuperer la taille d'origine d'une image pour pouvoir l'afficher sans la deformer!!!!!!!!!!! [ par NFab ] Voila, je dois realiser un traducteur HTML (une sorte de Dreamweaver moins sophistique) dans le cadre d'un projet scolaire.Mais, je ne sais pas commen


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales