00. はじめに
ファイルのドラッグ&ドロップを許可する場合、指定のファイルのみだけではなく、ファイルへのショートカットも受け付けるようにした方がUXが良いように思えます。
ここではショートカットのリンク先を取得する方法を記載します。
なお、ここでいうショートカットは".lnk"拡張子であり、".url"のインターネットショートカットではないです。
(".url"はただのテキストファイルですし...)
01. 参照の追加
参照マネージャーの"COM"から
"Windows Script Host Object Model"
にチェックを入れます。
02. コード
// ドロップ時のイベント
private void DragDrop(object sender, DragEventArgs e)
{
// ドロップされたファイルを順に確認する
foreach (string file in (string[])e.Data.GetData(DataFormats.FileDrop))
{
// ファイルの拡張子を取得
string extension = Path.GetExtension(file);
// ファイルへのショートカットは拡張子".lnk"
if (".lnk" == extension)
{
IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
// ショートカットオブジェクトの取得
IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(file);
// ショートカットのリンク先の取得
string targetPath = shortcut.TargetPath.ToString();
}
}
}
"Windows Script Host Object Model"の詳細は以下を参照
Windows Script Host のオブジェクト モデル | https://msdn.microsoft.com/ja-jp/library/cc392522.aspx
98. 参考
C#によるショートカットファイルのリンク先ファイルのパス名取得の試作 | https://blogs.yahoo.co.jp/tinatina_2013/64256895.html
99. 更新履歴
日付 | 内容 |
---|---|
2018/04/16 | 投稿 |