Un fichier .lnk
sous Windows est un fichier réel destiné à être un raccourci vers un autre fichier. Cependant, je souhaite vraiment voir le contenu du fichier .lnk
lui-même. Je trouve littéralement impossible de le faire; peu importe ce que j'essaie, mes applications ouvrent le contenu du fichier vers lequel il pointe (glisser/déposer dans l'éditeur de texte ou hexagonal, fichier | ouvert depuis l'éditeur de texte ou hexadécimal, etc. .)
Existe-t-il un moyen de demander à un programme d'ouvrir le fichier .lnk au lieu du fichier vers lequel il pointe?
Pour éditer un raccourci, vous devez évidemment l’ouvrir en premier, ce qui est délicat. Dans certains cas , vous pouvez forcer des programmes à charger des fichiers de raccourci à l'aide d'un argument de ligne de commande:
"X:\Path\to\program.exe" "X:\my shortcut.lnk"
Le chargement du fichier cible ou du fichier de raccourci dépend toutefois du programme. Voici une liste (sans ordre particulier) de certains éditeurs hexagonaux libres qui les prend en charge immédiatement:
Ouvrir la boîte de dialogue Oui
Glisser-déposer Non
XVI32 , éditeur Hex libre Neo , Tiny Hexer , wxHexEditor , Hex-Editor MX , Frhed
Ouvrir la boîte de dialogue Non
Glisser-déposer Oui
Si vous ne parvenez pas à charger le contenu d'un fichier de raccourci, vous pouvez ouvrir une commande Invite et renommer le fichier .lnk
en une extension différente, non existante, telle que .lne
:
cd /d "X:\Folder\containing\shortcuts"
ren "my shortcut.lnk" "my shortcut.lne"
Si vous avez plusieurs fichiers, vous pouvez également les renommer tous en même temps:
ren *.lnk *.lne
Vous pourrez alors traiter ces raccourcis comme des fichiers normaux. Lorsque vous avez terminé, assurez-vous de les renommer pour restaurer leurs fonctionnalités habituelles.
Un raccourci, ou Shell link , contient des informations de métadonnées permettant d’accéder à un lien spécifique cible . Il est analysé et interprété par le shell Windows. De la documentation officielle:
La structure de liens de Shell stocke diverses informations utiles aux utilisateurs finaux, notamment:
Un raccourci clavier qui peut être utilisé pour lancer une application.
Un commentaire descriptif.
Paramètres qui contrôlent le comportement de l'application.
Données facultatives stockées dans des sections de données supplémentaires .
Source: [MS-SHLLINK]: Format de fichier binaire Shell Link (.LNK) - Présentation
Les raccourcis sont stockés sous forme de fichiers binaires et ne peuvent pas être modifiés à l'aide d'un éditeur de texte standard. Un fichier .lnk
typique ressemble à quelque chose comme ceci en interne:
00000000 4C 00 00 00 01 14 02 00 00 00 00 00 C0 00 00 00 L...........À...
00000010 00 00 00 46 DC 03 00 02 20 00 00 00 C6 EF 52 BE ...FÜ... ...ÆïR¾
00000020 10 04 CA 01 C6 EF 52 BE 10 04 CA 01 60 45 8A 67 ..Ê.ÆïR¾..Ê.`EŠg
00000030 20 04 CA 01 00 9A 04 00 00 00 00 00 01 00 00 00 .Ê..š..........
Les vingt premiers octets sont toujours les suivants:
4C 00 00 00 01 14 02 00 00 00 00 00 C0 00 00 00 00 00 00 46
J'ai essayé cela et cela fonctionne pour moi sur Windows 8.1:
Ouverture de fichiers LNK
dans le Bloc-notes:
Open
, le Bloc-notes ouvrira le fichier EXE
pointé par le fichier LNK
.Ouverture de fichiers LNK
dans éditeur hexadécimal HxD :
File
→ Open
)Ouverture de fichiers LNK
à l’aide de la commande Invite:
LNK
et tapez la commande suivante: TYPE SHORTCUTNAME.LNK
Ouverture de fichiers LNK
dans n’importe quel programme:
PROGRAM_NAME.EXE "path to LNK file"
L'intérêt d'un fichier .lnk est que Windows le considère comme un lien vers un autre fichier, de sorte qu'il soit difficile à modifier!
Peut-être que cela vous aiderait si vous décriviez POURQUOI vous voulez l’éditer. Vous pouvez modifier les paramètres d'un fichier .lnk en cliquant avec le bouton droit de la souris et en choisissant Propriétés .
Si vous voulez vraiment l'éditer, vous avez besoin d'un outil spécial. Il en existe quelques-uns, notamment:
NB: Je n'ai essayé aucun de ceux-ci, juste les googler.
METTRE À JOUR:
Je ne sais pas pourquoi je n'y avais pas pensé auparavant, mais vous pouvez modifier les propriétés via PowerShell. De cette réponse précédente sur Stack Overflow :
Copy-Item $sourcepath $destination ## Get the lnk we want to use as a template
$Shell = New-Object -COM WScript.Shell
$shortcut = $Shell.CreateShortcut($destination) ## Open the lnk
$shortcut.TargetPath = "C:\path\to\new\exe.exe" ## Make changes
$shortcut.Description = "Our new link" ## This is the "Comment" field
$shortcut.Save() ## Save
Comme cela utilise l'objet COM Shell, vous pouvez également le faire avec WSH ou même VBA dans Office!
Les fichiers .LNK sont interprétés par le shell. Si vous ouvrez une invite de commande et appelez votre outil d'édition (disons simplement Notepad par exemple) en utilisant le fichier .LNK comme argument, cela devrait contourner le shell et ouvrir le contenu du fichier .LNK lui-même.
notepad.exe shortcut.lnk
Si vous avez des raisons de modifier souvent ces fichiers, ajoutez un raccourci vers notepad.exe dans votre dossier SendTo (Sous Windows 7: C:\Utilisateurs\USER\AppData\Roaming\Microsoft\Windows\SendTo). Cela rend "Envoyer à notepad.exe" disponible à partir de votre RT. Cliquez sur le menu contextuel. Le fichier .ink va s'ouvrir et peut être modifié et enregistré dans notepad.exe.
Si vous utilisez CMD pour exécuter un programme avec le fichier de liaison en tant que paramètre, ce paramètre est transmis intégralement au programme. C'est au programme de décider comment gérer le lien.
J'ai testé cela avec FRHED, l'éditeur hexadécimal gratuit (et portable): lorsque vous l'exécutez à partir de la ligne de commande, en passant un lien en tant que paramètre , il vous demande si vous souhaitez ouvrir le fichier lié à ( Oui ), le lien lui-même ( Non ) ou Annuler .
Bizarrement, si vous utilisez Ouvrir dans le menu Fichier FRHED, le fichier cible s'ouvre sans rien demander.
Sur XP j'ai FRHED dans mon menu contextuel SendTo , et cela fonctionne de la même manière que CMD. J'imagine que Win7 est similaire (j'utilise un système Win7 pour une application dédiée et je ferai de simples tests dessus, comme ci-dessus, mais je ne plaisante pas avec sa configuration).
Les fichiers .lnk ne sont que des fichiers jusqu'à ce qu'un composant de niveau supérieur, tel que Explorer.EXE, leur affecte une gestion. À un niveau inférieur (NTFS), ils ont toujours une structure normale comprenant un flux de données. En particulier, tout le contenu est dans le flux foo.lnk::$DATA
. Tous les outils de niveau supérieur ne reconnaîtront pas cette syntaxe. S'ils supposent simplement qu'il s'agit d'un nom de fichier étrange et le transmettent, ils obtiendront le contenu .lnk.
Par exemple. Sur la ligne de commande, MORE < foo.lnk::$DATA > con
afficherait les données, mais c'est un peu du charabia (les parties sont binaires)