У нас есть сетевой диск, полный ярлыков (.lnk файлов), которые указывают на папки, и мне нужно программно их перемещать в приложении С# Winforms.
Какие практические варианты у меня есть?
У нас есть сетевой диск, полный ярлыков (.lnk файлов), которые указывают на папки, и мне нужно программно их перемещать в приложении С# Winforms.
Какие практические варианты у меня есть?
Добавьте IWshRuntimeLibrary в качестве ссылки на ваш проект. Добавить ссылку, вкладку COM, модель объекта хоста Windows Scripting.
Вот как я получаю свойства ярлыка:
IWshRuntimeLibrary.IWshShell wsh = new IWshRuntimeLibrary.WshShellClass();
IWshRuntimeLibrary.IWshShortcut sc = (IWshRuntimeLibrary.IWshShortcut)wsh.CreateShortcut(filename);
Объект ярлыка "sc" имеет свойство TargetPath.
Насколько мне известно, вы можете создавать классы .NET, соответствующие каждому из этих интерфейсов, для использования диалогового окна "Добавить ссылку".
Интерфейс IShellLink позволяет вам манипулировать файлами .lnk, хотя это немного больно для использования с С#.
В этой статье есть некоторый код, реализующий необходимые взаимодействия gubbins.
Обновление
Вы можете найти код из статьи здесь, но эта страница, похоже, не работает в Firefox. Он работает в IE.
Я знаю, что это не правильный путь и что структуры файлов 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);
}