特定の種類のファイルを読み取ることができるアプリケーションがあり、Windows から "open with" を実行すると、アプリケーションが自動的に起動され、選択したファイルが開かれるように動作しています。
残念ながら、複数のファイルに対して機能させることはできません。
System.Environment.GetCommandLineArgs() には、次の制限があります。 System.Environment.GetCommandLineArgs(0) = .exe の名前とパス System.Environment.GetCommandLineArgs(1) = 開くために選択された最初のファイルの名前とパス
System.Environment.GetCommandLineArgs().Length は、ユーザーが 1 つのファイルを開こうとすると 2 になります。これは、最初の引数が .exe 自体であり、2 番目の引数がファイルへのパスであるため意味がありますが、次の場合は 3 に増加しません。ユーザーは 2 つのファイルを開こうとします...つまり、 System.Environment.GetCommandLineArgs(2) は読み込まれません
問題を示すサンプル コードを次に示します。ファイルがまったく開かれていないか、1 つのファイルが開かれていることを認識しますが、複数を開こうとすると、最初のファイルしか表示されません。
Private Sub Form_Main_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Me.Show()
' Check if the user is opening a file upon startup
If System.Environment.GetCommandLineArgs().Length > 1 Then
Dim i As Integer
'this outputs the exe path and the the first file, if it exists, but never the 2nd file...
'For i = 0 To System.Environment.GetCommandLineArgs().Length - 1
' MsgBox(System.Environment.GetCommandLineArgs(i))
'Next
'this outputs the first file, if it exists, but never the 2nd file...
For i = 1 To System.Environment.GetCommandLineArgs().Length - 1
MsgBox(System.Environment.GetCommandLineArgs(i))
Next
End If
End Sub
足りないものはありますか?System.Environment.GetCommandLineArgs() を使用する代わりの方法はありますか
また、たとえばターゲットを設定するなど、.exeへのショートカットでそれらを指定すると、実際に複数のコマンド引数を持つことができることに気付きました。
"C:\Program Files\Reader\Reader.exe" -today -tommorow
そのように実行すると、次のようになります。
System.Environment.GetCommandLineArgs().Length = 3
System.Environment.GetCommandLineArgs(0) = "C:\Program Files\Reader\Reader.exe"
System.Environment.GetCommandLineArgs(1) = "-today"
System.Environment.GetCommandLineArgs(2) = "-tomorrow"
これは私が期待するものです...
それが役立つ場合、私はWindows XPを使用しています