ヘッダー
Visual Basic サンプル集
VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

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

2020/6/24

 

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

 

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Dim path1 As String = Environment.GetCommandLineArgs(1)
Dim path2 As String = Environment.GetCommandLineArgs(2)
Dim path3 As String = Environment.GetCommandLineArgs(3)

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

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

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

 

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

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

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

For Each droppedPath In Environment.GetCommandLineArgs.Skip(1)
    '取得したパスを C:\temp\droptest.txt に書き込みます。確認用に利用してください。
    IO.File.AppendAllLines("C:\temp\droptest.txt", {droppedPath})
Next

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

 

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

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

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

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

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

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

 

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

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

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

 

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

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

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

 


VB6対応 VB6では「起動時にドロップされたファイルを受け取る」を参照。