Les raccourcis peuvent être manipulés à l'aide des objets COM dans SHELL32.DLL.
Dans votre projet Visual Studio, ajoutez une référence à la bibliothèque COM « Contrôles Microsoft Shell et automatisation », puis utilisez les éléments suivants:
/// <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
}
Vous pouvez obtenir la cible réelle du lien comme suit:
/// <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
}
ce serait presque travailler, sauf pour les cas où le raccourci est dans un fichier zip (je suppose, je ne l'ai pas testé) ou si tout ce que j'ai est comme un tampon d'octets. – BCS
Vous pourriez écrire du code pour gérer ces cas, non? –
Cela m'a aidé à éviter d'avoir à utiliser une référence InterOp.Shell32 parasite. Espérons que la connaissance aide les autres aussi. – ouflak