Перетаскивание динамически созданного ярлыка
У меня есть приложение C #, которое создает ярлыки для запуска других программ с конкретными аргументами и начальными каталогами. Я хотел бы, чтобы пользователь мог перетаскивать ярлык из формы Windows и помещать его в любое место, например на рабочий стол, в меню «Пуск» и т. Д., Но я нене знаю, как справиться с этим, кто-нибудь может указать мне правильное направление?
Я видел несколько образцов, используя PInvoke иIShellLink лайкэтотили прочитайте ответы на ТАК вродеВот, которые уже помогают создавать ярлыки и сохранять их в файле .lnk. Я предполагаю, что должен передать данные вDoDragDrop()
вызов, когда пользователь инициирует операцию перетаскивания, например, путем обработкиMouseDown
сигнал. Тот'Насколько я понял, я думаю, что мне нужно точно знать, какой тип целевой объект ожидает, чтобы принять падение, и как сериализовать ярлык, но не могне могу найти никакой информации по этой части.
Возможно, другим вариантом было бы получить расположение капли и управлять этим из моего приложения, но я сноваЯ немного не в курсе, как это сделать.
Версия фреймворка в настоящее время 3.5, и ям только с учетом платформ Windows.
Заранее спасибо за помощь!
Обновление / Решение:
С использованиемКод ShellLink упомянутое выше, чтобы создать временный файл ярлыка, я просто использовалDataObject
для перетаскивания, как в следующем примере:
private void picShortcut_MouseDown(object sender, MouseEventArgs e)
{
ShellLink link = new ShellLink();
// Creates the shortcut:
link.Target = txtTarget.Text;
link.Arguments = txtArguments.Text;
link.Description = txtDescription.Text;
link.IconPath = txtIconFile.Text;
link.IconIndex = (txtIconIndex.Text.Length > 0 ?
System.Int32.Parse(txtIconIndex.Text) : 0);
link.Save("tmp.lnk");
// Starts the drag-and-drop operation:
DataObject shortcut = new DataObject();
StringCollection files = new StringCollection();
files.Add(Path.GetFullPath("tmp.lnk"));
shortcut.SetFileDropList(files);
picShortcut.DoDragDrop(shortcut, DragDropEffects.Copy);
}
Довольно сложно, если учесть код PInvoke (здесь не показан), и мне все еще нужно создать этот временный файл с целевым именем. Если кто-нибудь знает ... э-э, ярлык, этоДобро пожаловать! Возможно, путем переноса кода, для которогоДжон Ноллер дал ссылку (спасибо!).