2010-08-06 4 views
2

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

ответ

3

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

Что касается API вы можете использовать IShellLink Interface

+0

К сожалению вы приходилось так долго ждать щедрости. Это мой первый вопрос о щедрости, и я думал, что награждение было автоматическим с принятием. Вот ваша награда! – MPelletier

+1

Официальный PDF-файл Microsoft - http://msdn.microsoft.com/en-us/library/dd871305.aspx. (Кроме того, ваша ссылка сейчас не работает) – ninMonkey

0

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

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

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

+1

Этот документ можно найти по адресу http://download.microsoft.com/download/a/e/6/ae6e4142-aa58-45c6-8dcf-a657e5900cd3/%5BMS-SHLLINK%5D .pdf – Tobbe

+4

Мне нравится «Раздел 4: Безопасность» много. – ZJR

+0

Теперь это здесь: https://msdn.microsoft.com/en-us/library/dd871305.aspx?f=255&MSPPError=-2147217396. – deerchao

0

Использование WSH компоненты, связанные с кажется наиболее удобный вариант для чтения .lnk файлов в большинстве языков на окна системы после XP. Вам просто нужен доступ к среде COM и создание экземпляра компонента WScript.Shell. (помните, что при победе ссылки на Shell обычно относятся к 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 в той или иной форме.

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

  • WindowStyle,
  • Hotkey,
  • IconLocation,
  • Description,
  • WorkingDirectory
1

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

См lnk-parse-1.0.pl на http://jafat.sourceforge.net

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

2

Это старый пост, но вот мой C реализация # для обработки LNK, который обрабатывает Целые SPEC

https://github.com/EricZimmerman/Lnk

подробнее и инструмент командной строки здесь

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

+0

Я думаю, было бы неплохо добавить описание и образец кода на эту первую страницу проекта. – NoOne

Смежные вопросы