実行ファイルのアイコンにドロップされたファイル名を取得する
実行ファイルのアイコンにエクスプローラからドロップされたファイル名を取得するコードを紹介します。
概要
実行ファイルにファイルのアイコンにエクスプローラからファイルをドロップした場合、実行時引数にドロップされたファイルが渡されます。
プログラム例
Windows Formアプリケーションを作成します。
UI
下図のフォームを作成依します。
Multiline
プロパティをTrueに設定した複数行のテキストボックスを配置します。
コード
下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ProgramDrop
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string[] files = System.Environment.GetCommandLineArgs();
if (files.Length > 0) {
textBox1.Text += "実行ファイル名\r\n";
textBox1.Text += files[0]+ "\r\n";
if (files.Length > 1) {
textBox1.Text += "ドロップファイル名\r\n";
for (int i = 1; i < files.Length; i++) {
textBox1.Text += files[i] + "\r\n";
}
}
}
}
}
}
解説
System.Environment.GetCommandLineArgs()
メソッドを呼び出し実行ファイルのコマンドライン引数を取得します。
string[] files = System.Environment.GetCommandLineArgs();
GetCommandLineArgs メソッドの戻り値のstring配列に要素が1つ以上ある(長さが0より大きい)場合はif文内を実行します。
if (files.Length > 0) {
/* 中略 */
}
files 配列の先頭 (インデックス0)の要素には実行ファイルのパスが格納されています。実行ファイル名をテキストボックスに表示します。
textBox1.Text += "実行ファイル名\r\n";
textBox1.Text += files[0]+ "\r\n";
配列の2番目以降(インデックス1以上)の要素にはドロップされたファイルのパスが格納されています。ドロップされたファイル名をテキストボックスに表示します。
if (files.Length > 1) {
textBox1.Text += "ドロップファイル名\r\n";
for (int i = 1; i < files.Length; i++) {
textBox1.Text += files[i] + "\r\n";
}
}
実行結果
プロジェクトをビルドします。ビルド結果のフォルダを表示します。
プログラムのexeファイルを実行します。下図のウィンドウが表示されます。実行ファイル名に実行プログラムファイルが表示されます。
下図は.NET 5のWindows Formアプリケーションの場合の実行結果です。.NET 5の場合は実行プログラムのexeファイル名ではなく、dllファイル名が実行ファイル名として表示されます。
エクスプローラからファイルをドラッグし、実行ファイルのアイコンにドロップしてプログラムを実行します。
ファイルをドロップしてプログラムを実行した場合は、下図のウィンドウが表示されます。プログラムにドロップされたファイルのパスがテキストボックスに表示されます。
補足
.NET Framework のWindows Formアプリケーションの場合は実行ファイル名の実行プログラムはexeファイル名が表示されます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用