Как программно выполнять файл .lnk
У нас есть сетевой диск, полный ярлыков (.lnk файлов), которые указывают на папки, и мне нужно программно их перемещать в приложении С# Winforms.
Какие практические варианты у меня есть?
Ответы
Ответ 1
Добавьте IWshRuntimeLibrary в качестве ссылки на ваш проект. Добавить ссылку, вкладку COM, модель объекта хоста Windows Scripting.
Вот как я получаю свойства ярлыка:
IWshRuntimeLibrary.IWshShell wsh = new IWshRuntimeLibrary.WshShellClass();
IWshRuntimeLibrary.IWshShortcut sc = (IWshRuntimeLibrary.IWshShortcut)wsh.CreateShortcut(filename);
Объект ярлыка "sc" имеет свойство TargetPath.
Ответ 2
- Загрузите файл с помощью интерфейса COM IPersistFile.
- Сделайте QueryInterface для результата, чтобы превратить его в интерфейс IShellLink.
- Вызов IShellLink:: GetPath
Насколько мне известно, вы можете создавать классы .NET, соответствующие каждому из этих интерфейсов, для использования диалогового окна "Добавить ссылку".
Ответ 3
Интерфейс IShellLink позволяет вам манипулировать файлами .lnk, хотя это немного больно для использования с С#.
В этой статье есть некоторый код, реализующий необходимые взаимодействия gubbins.
Обновление
Вы можете найти код из статьи здесь, но эта страница, похоже, не работает в Firefox. Он работает в IE.
Ответ 4
Я знаю, что это не правильный путь и что структуры файлов lnk могут меняться и т.д., но это то, что я делаю:
private static string LnkToFile(string fileLink)
{
string link = File.ReadAllText(fileLink);
int i1 = link.IndexOf("DATA\0");
if (i1 < 0)
return null;
i1 += 5;
int i2 = link.IndexOf("\0", i1);
if (i2 < 0)
return link.Substring(i1);
else
return link.Substring(i1, i2 - i1);
}