ヘッダー
C# サンプル集
 

起動時にドロップされたファイルを受け取る

2020/7/19

→ Visual Basic のサンプルに切り替える

 

起動時にドロップされたファイルのパスを取得する

 

string path1 = Environment.GetCommandLineArgs()[1];
string path2 = Environment.GetCommandLineArgs()[2];
string path3 = Environment.GetCommandLineArgs()[3];

//取得したパスを C:\temp\droptest.txt に書き込みます。確認用に利用してください。
System.IO.File.AppendAllLines(@"C:\temp\droptest.txt", new string[] { path1 });
System.IO.File.AppendAllLines(@"C:\temp\droptest.txt", new string[] { path2 });
System.IO.File.AppendAllLines(@"C:\temp\droptest.txt", new string[] { path3 });

スペースを含むパスも受け取れます。

メモ:最初のファイルは (0) ではなく、(1) です。 (0) は実行ファイルのフルパスを表します。

 

同じことをループで処理する例

こちらはいくつでも処理できます。

foreach (string droppedPath in Environment.GetCommandLineArgs().Skip(1))
{
    //取得したパスを C:\temp\droptest.txt に書き込みます。確認用に利用してください。
    System.IO.File.AppendAllLines(@"C:\temp\droptest.txt", new string[] { droppedPath });
}

この例はファイルの先頭に using System.Linq; があることが前提です。

メモ:ドロップされたファイルのフルパスはコマンドラインとして扱われます。コマンドラインの最大長は8191文字程度です。大量のファイルやフォルダーをドロップするとこの上限に達する場合があります。

 

参考:Visual Studioでデバッグ実行する方法

Visual Studioで本当にドロップしてデバッグ実行を開始することはできません。

ドロップしたことにしてデバッグ実行することはできます。

それには、プロジェクトのプロパティでデバッグページのアプリケーション引数にドロップされたファイルのフルパスを入力します。" " で囲むと良いです。複数ある場合はスペースをはさんでそれぞれを" " で囲みます。

Visual Studioでドロップされた状態をデバッグ実行する

この画面のUIや表示されている項目名はVisual Studioのバージョンによって異なります。

 

別の方法としては、Visual Studioの外でexeファイルにファイルをドロップして起動した後で、Visual Studioからそのアプリケーションにアタッチしてデバッグすることができます。

起動後のアプリケーションにアタッチするには、Visual Studioの[デバッグ]メニューから、[プロセスにアタッチ]で、プロセスの一覧から目的のアプリケーションを選択して「アタッチ」ボタンをクリックします。

あらかじめVisual Studioでソースコードが開かれた状態で、かつ、exeのフォルダーにpdbファイルがあるとスムーズです。

 

参考:冒頭の動画のアプリケーションのプログラム

WindowsフォームアプリケーションでVisual Basicで作りました。

VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.Location = New Point(100, 100)
    End Sub

    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown
        Label2.Text = Environment.GetCommandLineArgs(1)
    End Sub
End Class

 

参考

コマンド プロンプト (cmd.exe) のコマンドライン文字列の制限

https://support.microsoft.com/ja-jp/help/830473/command-prompt-cmd-exe-command-line-string-limitation

コマンド プロンプト (Cmd.exe) へ 8192 文字以上の引数を渡した場合に発生する現象

https://support.microsoft.com/ja-jp/help/2823587