Перетаскивание динамично созданного ярлыка

У меня есть приложение C#, которое создает ярлыки для запуска других программ с определенными аргументами и первоначальных каталогов. Я хотел бы, чтобы пользователь смог перетащить ярлык от формы Windows и отбросить ее где-нибудь релевантный как рабочий стол, меню "Пуск", и так далее но я действительно не знаю, как обработать это, кто-либо мог указать на меня в правильном направлении?

Я видел, что несколько образцов используют PInvoke и IShellLink как этот, или прочитал ответы на ТАК как здесь, которые уже помогают создать ярлыки и сохранить их в .lnk файле. Я предполагаю, что должен передать данные в a DoDragDrop() звоните, когда пользователь будет инициировать операцию перетаскивания, например, путем обработки a 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 (не показанным здесь), и я все еще должен создать этот временный файл с целевым именем. Если кто-либо знает... erm, ярлык, это приветствуется! Возможно, путем портирования кода, для которого John Knoeller дал ссылку (Спасибо!).

5
задан Community 23 May 2017 в 12:30
поделиться

2 ответа

Раймонд Чен написал целую статью именно по этой теме в своем блоге, посмотрите перетаскивая виртуальный файл

4
ответ дан 14 December 2019 в 19:15
поделиться

Я ответил на вопрос, похожий на этот, в предыдущем потоке. Это может быть отправной точкой для вас.

Ссылка для перетаскивания

1
ответ дан 14 December 2019 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: