Verknüpfungen können mithilfe der COM-Objekte in SHELL32.DLL bearbeitet werden.
In Ihrem Visual Studio-Projekt, einen Verweis auf die COM-Bibliothek „Microsoft Shell-Bedienelemente und Automation“ hinzufügen und dann verwenden Sie die folgende:
/// <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
}
Sie können die tatsächliche Ziel des Links erhalten Sie wie folgt vor:
/// <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
}
gebrochen das außer fast funktionieren würde für die Fälle, in denen die Verknüpfung in einer Zip-Datei ist (ich würde davon ausgehen, ich habe nicht getestet), oder wenn alles, was ich habe, ist es als ein Byte-Puffer. – BCS
Sie könnten etwas Code schreiben, um diese Fälle zu behandeln, richtig? –
Dies half mir zu vermeiden, eine streunende InterOp.Shell32 Referenz zu verwenden. Ich hoffe, dass Wissen auch anderen hilft. – ouflak