Я использую sh, чтобы найти цель ярлыка (файл .lnk, а не символическую ссылку) в Windows 10, используя C#.
Я искал несколько часов и нашел множество методов для при этом запомнились два комментария о том, что ярлыки в Windows 10 несколько отличаются. Во-вторых, это сложнее, чем кажется. Ни один из методов, которые я пробовал, не работает. Я сослался на все необходимые COM-объекты.
Они компилируются (полные программы делают), но не производят вывода, за исключением идеи Shell32, которая имеет ошибку разрешения.
Примеры что я пробовал (фрагменты)
IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(filePath);
return shortcut.TargetPath;
// supposed to reference an existing shortcut, but no output
---or---
dynamic shortcut;
dynamic windowsShell;
Type shellObjectType = Type.GetTypeFromProgID("WScript.Shell");
windowsShell = Activator.CreateInstance(shellObjectType);
shortcut = windowsShell.CreateShortcut(LinkName);
string Properfile = shortcut.TargetPath;
// Release the COM objects
shortcut = null;
windowsShell = null;
return Properfile;
//no output
---or---
string pathOnly = System.IO.Path.GetDirectoryName(shortcutFilename);
string filenameOnly = System.IO.Path.GetFileName(shortcutFilename);
Shell shell = new Shell();
Folder folder = shell.NameSpace(pathOnly);
FolderItem folderItem = folder.ParseName(filenameOnly);
if (folderItem != null)
{
Shell32.ShellLinkObject link = (Shell32.ShellLinkObject)folderItem.GetLink;
return link.Path;
}
// permission error
Это фрагменты, но передают идею ввода, процедуры и результата.
Единственное, что я нашел, - это документ Microsoft на структура файла .lnk. Я видел решения, которые анализируют их (более старые версии), но мне бы очень хотелось остаться с современным API.
Итак, я резюмировал (да, написание Aus), что я хочу, что я пробовал и как код не выполнен.
Для сравнения, цель состоит в том, чтобы иметь окно с ярлыками, но, похоже, мне нужно go вернуться к исполняемому файлу, чтобы получить значки разного размера в ListView.