Общий подход к чтению файлов LNK - PullRequest
3 голосов
/ 06 августа 2010

Некоторые фреймворки и языки, кажется, имеют парсеры файлов lnk (C #, Java, Python, конечно, бесчисленное множество других), чтобы добраться до их целей, свойств и т. Д. Я хотел бы знать, каков общий подход к чтению файлов lnk, если я хочу проанализировать lnk на другом языке, который не имеет указанной функции.Есть ли для этого Windows API?

Ответы [ 5 ]

3 голосов
/ 09 августа 2010

Не существует официального документа от Microsoft, описывающего формат файла lnk, но есть некоторые документы, в которых есть описание формата.Вот один из них: Формат файла ярлыка (.lnk)

Что касается API, вы можете использовать Интерфейс IShellLink

2 голосов
/ 13 февраля 2016

Это старый пост, но здесь моя реализация C # для обработки lnk, которая обрабатывает всю спецификацию

https://github.com/EricZimmerman/Lnk

дополнительная информация и инструмент командной строки здесь

http://binaryforay.blogspot.com/2016/02/introducing-lecmd.html

1 голос
/ 08 ноября 2013

Просто используйте анализатор файлов lnk на J.A.F.A.T. Проект инструментов криминалистического анализа .

См. Lnk-parse-1.0.pl в http://jafat.sourceforge.net

Кажется, нет никаких зависимостей. Синтаксис прост, и файл ссылок становится простым текстом в стандартном выводе и может использоваться в Linux.

0 голосов
/ 20 ноября 2011

Использование компонентов, связанных с WSH представляется наиболее удобным вариантом для чтения файлов .lnk на большинстве языков в Windows XP после установки системы.Вам просто нужен доступ к среде COM и создание экземпляра компонента WScript.Shell.(помните, что в win ссылки на оболочку обычно ссылаются на explorer.exe)

Следующий фрагмент кода, например, работает на PHP: (PHP 5, используя COMобъект)

<?php
$wsh=new COM('WScript.Shell'); // the wsh object

// please note $wsh->CreateShortcut method actually
// DOES THE READING, if the file already exists. 
$lnk=$wsh->CreateShortcut('./Shortcut.lnk');
echo $lnk->TargetPath,"\n";

Этот другой вместо этого делает то же самое на VBScript:

set sh = WScript.CreateObject("WScript.Shell")
set lnk = sh.CreateShortcut("./Shortcut.lnk")
MsgBox lnk.TargetPath

Большинство примеров в этом поле написаны на VB / VBS , но они хорошо переводят на весь диапазон языков, поддерживающих взаимодействие COM и WSH в той или иной форме.

Это простое руководство может пригодиться, так как перечисляет и иллюстрирует некоторые из самых интересных свойств файла .lnk, кроме самых важных: TargetPath.Это:

  • WindowStyle,
  • Hotkey,
  • IconLocation,
  • Description,
  • WorkingDirectory
0 голосов
/ 10 июня 2011

@ Giorgi: На самом деле, является официальной спецификацией файлов lnk, по крайней мере, так заявлено: http://msdn.microsoft.com/en-us/library/dd871305%28PROT.10%29.aspx Однако, по какой-то причине, ссылка кажется мертвой, ипосле загрузки всего пакета документов (45Megs) (Application_Services_and_NET_Framework.zip), по-видимому, он не включает файл MS-SHLLINK.pdf.

Но действительно ли это удивительно?

После того, как выполучил формат файла, не должно быть слишком сложно написать код для чтения.

...