vs2017 visual teclado studio sheet metodos contraer code cheat atajos c# shortcuts

c# - visual - ¿Cómo puedo probar programáticamente si una ruta/archivo es un atajo?



visual studio shortcuts cheat sheet (3)

Necesito probar si un archivo es un atajo. Todavía estoy intentando descubrir cómo se configurarán las cosas, pero tal vez solo tenga su ruta, es posible que solo tenga el contenido real del archivo (como un byte []) o podría tener ambas.

Algunas complicaciones incluyen que podría estar en un archivo zip (en este caso, la ruta será una ruta interna)


Los accesos directos se pueden manipular utilizando los objetos COM en SHELL32.DLL.

En su proyecto de Visual Studio, agregue una referencia a la biblioteca COM "Microsoft Shell Controls And Automation" y luego use lo siguiente:

/// <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 }

Puede obtener el objetivo real del enlace de la siguiente manera:

/// <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 }


Simplemente puede verificar la extensión y / o el contenido de este archivo. Contiene un GUID especial en el encabezado.

Lea este documento .


Verifica la extensión? (.lnk)