我需要测试文件是否是快捷方式。我还在试图弄清楚如何设置东西,但我可能只有它的路径,我可能只有文件的实际内容(作为byte [])或者我可能都有。
一些复杂情况包括我可能是一个zip文件(在这种情况下,路径将是一个内部路径)
答案 0 :(得分:14)
可以使用SHELL32.DLL中的COM对象操作快捷方式。
在Visual Studio项目中,添加对COM库“Microsoft Shell Controls And Automation”的引用,然后使用以下命令:
/// <summary>
/// Returns whether the given path/file is a link
/// </summary>
/// <param name="shortcutFilename"></param>
/// <returns></returns>
public static bool IsLink(string shortcutFilename)
{
string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename);
string filenameOnly = System.IO.Path.GetFileName(shortcutFilename);
Shell32.Shell shell = new Shell32.ShellClass();
Shell32.Folder folder = shell.NameSpace(pathOnly);
Shell32.FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null)
{
return folderItem.IsLink;
}
return false; // not found
}
您可以按如下方式获取链接的实际目标:
/// <summary>
/// If path/file is a link returns the full pathname of the target,
/// Else return the original pathnameo "" if the file/path can't be found
/// </summary>
/// <param name="shortcutFilename"></param>
/// <returns></returns>
public static string GetShortcutTarget(string shortcutFilename)
{
string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename);
string filenameOnly = System.IO.Path.GetFileName(shortcutFilename);
Shell32.Shell shell = new Shell32.ShellClass();
Shell32.Folder folder = shell.NameSpace(pathOnly);
Shell32.FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null)
{
if (folderItem.IsLink)
{
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
return link.Path;
}
return shortcutFilename;
}
return ""; // not found
}
答案 1 :(得分:3)
您只需检查此文件的扩展名和/或内容即可。它在标题中包含一个特殊的GUID。
答案 2 :(得分:-1)
检查分机号码?方式(.lnk)