许多框架和编程语言似乎都有lnk文件解析器(C#,Java,Python等等),用于获取它们的目标、属性等信息。如果我想在没有此类功能的其他语言中解析lnk文件,我希望知道读取lnk文件的一般方法是什么。是否有Windows API可用于此?
许多框架和编程语言似乎都有lnk文件解析器(C#,Java,Python等等),用于获取它们的目标、属性等信息。如果我想在没有此类功能的其他语言中解析lnk文件,我希望知道读取lnk文件的一般方法是什么。是否有Windows API可用于此?
只需要在 J.A.F.A.T. 鉴证分析工具项目 中使用 lnk 文件解析器。
请查看 http://jafat.sourceforge.net 上的 lnk-parse-1.0.pl。
似乎没有任何依赖关系。语法简单,链接文件会成为标准输出中的简单文本,并可在 Linux 上使用。
在后XP的Windows系统中,使用WSH相关组件似乎是读取.lnk
文件的最方便选项。您只需要访问COM环境并实例化WScript.Shell
组件即可。(请记住,在win上,对Shell的引用通常指explorer.exe
)
例如,以下代码片段可以在PHP上完成此操作:(使用COM对象的PHP 5)
<?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
这里是一些使用Shell32 API的C#代码,来自我的“ClearRecentLinks”项目,位于https://github.com/jmaton/ClearRecentLinks
要使用此代码,您的C#项目必须引用c:\windows\system32\shell32.dll
string linksPath = "c:\some\folder";
Type shell32Type = Type.GetTypeFromProgID("Shell.Application");
Object shell = Activator.CreateInstance(shell32Type);
Shell32.Folder s32Folder = (Shell32.Folder)shell32Type.InvokeMember("NameSpace", System.Reflection.BindingFlags.InvokeMethod, null, shell, new object[] { linksPath });
foreach (Shell32.FolderItem2 item in s32Folder.Items())
{
if (item.IsLink)
{
var link = (Shell32.ShellLinkObject)item.GetLink;
if (link != null && !String.IsNullOrEmpty(link.Target.Path))
{
string linkTarget = link.Target.Path.ToLower();
// do something...
}
}
}