2010-08-06 163 views
2

几种框架和语言似乎都有lnk文件解析器(C#,Java,Python,无数其他的解析器),以获得它们的目标,属性等。我想知道什么是读取lnk文件的一般方法,如果我想用另一种没有上述功能的语言解析lnk。有没有一个Windows API?阅读lnk文件的一般方法

回答

3

Microsoft没有提供描述lnk文件格式的官方文档,但有一些文档描述了格式。这里是其中的一个:Shortcut File Format (.lnk)

至于API,您可以使用IShellLink Interface

+0

对不起你必须等待这么长时间的赏金。这是我的第一个赏金问题,我认为奖励是自动接受的。这是你的奖励! – MPelletier 2010-08-13 15:26:43

+1

Microsoft官方PDF是http://msdn.microsoft.com/en-us/library/dd871305.aspx。 (加上您的链接现在已损坏) – ninMonkey 2015-01-19 01:01:20

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 2011-08-23 06:28:53

+4

我很喜欢“第4部分:安全”。 – ZJR 2011-11-19 23:27:59

+0

现在这里是:https://msdn.microsoft.com/en-us/library/dd871305.aspx?f=255&MSPPError=-2147217396。 – deerchao 2016-05-13 06:31:55

0

使用WSH相关的组件似乎是最方便的选择读取后XP的Windows系统上的大多数语言.lnk文件。您只需访问COM环境并实例化WScript.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

只需在J.A.F.A.T.使用LNK文件分析器法医分析工具档案项目

见lnk-parse-1.0.pl在​​

似乎没有没有依赖性。语法很简单,链接文件变为标准输出中的简单文本,并可在Linux上使用。