Przeciągnij i upuść dynamicznie utworzony skrót

Mam aplikację C #, która tworzy skróty do uruchamiania innych programów z określonymi argumentami i katalogami początkowymi. Chciałbym, aby użytkownik mógł przeciągnąć skrót z formularza systemu Windows i upuścić go w dowolnym miejscu, takim jak pulpit, menu startowe itd., Ale tak naprawdę nie wiem, jak sobie z tym poradzić, czy ktoś może wskazać mi dobry kierunek?

Widziałem kilka próbek za pomocą PInvoke iIShellLink lubićtenlub przeczytaj odpowiedzi na TAKtutaj, które już pomagają tworzyć skróty i zapisywać je w pliku .lnk. Zakładam, że muszę przekazać dane wDoDragDrop() zadzwoń, gdy użytkownik zainicjuje operację przeciągania, na przykład przez obsługę aMouseDown sygnał. O ile mi wiadomo, muszę dokładnie wiedzieć, jakiego typu obiekt spodziewa się zaakceptować spadek, i jak serializować skrót, ale nie mogłem znaleźć żadnych informacji na temat tej części.

Być może inną opcją byłoby zdobycie lokalizacji kropli i zarządzanie nią z mojej aplikacji, ale tam znowu jestem trochę nieświadomy, jak to zrobić.

Wersja ramowa jest obecnie w wersji 3.5 i rozważam tylko platformy Windows.

Z góry dziękuje za twoją pomoc!

Aktualizacja / rozwiązanie:

UżywającKod ShellLink powyżej, aby utworzyć tymczasowy plik skrótu, po prostu użyłemDataObject do przeciągania i upuszczania, jak w poniższym przykładzie:

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);
}

Dość skomplikowane, jeśli weźmiesz pod uwagę kod PInvoke (nie pokazany tutaj), a nadal muszę utworzyć ten plik tymczasowy z nazwą docelową. Jeśli ktoś wie ... erm, skrót, to jest mile widziane! Być może przez przeniesienie kodu, dla któregoJohn Knoeller dał link (dzięki!).

questionAnswers(2)

yourAnswerToTheQuestion