特定の引数と初期ディレクトリを使用して他のプログラムを起動するためのショートカットを作成するC#アプリケーションがあります。ユーザーがWindowsフォームからショートカットをドラッグして、デスクトップやスタートメニューなどの関連する場所にドロップできるようにしたいと思いますが、それを処理する方法がよくわかりません。正しい方向?
このようなPInvokeとIShellLinkを使用したサンプルをいくつか見たことがあります。または、ここのようにSOに関する回答を読んだことがあります。これは、ショートカットを作成して.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コード(ここには表示されていません)を考慮すると非常に複雑ですが、ターゲット名を使用してこの一時ファイルを作成する必要があります。誰かが知っているなら...えーと、ショートカット、それは大歓迎です!おそらく、John Knoellerがリンクを提供したコードを移植することによって(ありがとう!)。