相关疑难解决方法(0)

拖放动态创建的快捷方式

我有一个C#应用程序,它创建了一个快捷方式来启动具有特定参数和初始目录的其他程序.我希望用户能够从Windows窗体中拖动一个快捷方式,并将其放在任何相关的位置,如桌面,开始菜单等,但我真的不知道如何处理,有人可以指向我正确的方向?

我一直在使用的PInvoke,看到几件样品的IShellLink这一个,或阅读等等之类的答案在这里,它已经帮助创建快捷方式,并将它们保存在一个.lnk文件.我假设DoDragDrop()当用户启动拖动操作时,我必须在调用中移交数据,例如通过处理MouseDown信号.就我所知,我想我需要确切知道目标期望接受丢弃的类型,以及如何序列化快捷方式,但无法找到该部分的任何信息.

也许另一种选择是获取drop的位置,并从我的应用程序中管理它,但是我再次对如何做到这一点有点无能为力.

框架版本目前是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);
}
Run Code Online (Sandbox Code Playgroud)

如果你考虑PInvoke代码(这里没有显示),那么相当复杂,我仍然需要用目标名称创建这个临时文件.如果有人知道......呃,快捷方式,欢迎!也许通过移植 …

.net c# drag-and-drop windows-shell

5
推荐指数
1
解决办法
2900
查看次数

标签 统计

.net ×1

c# ×1

drag-and-drop ×1

windows-shell ×1