1

特定の種類のファイルを読み取ることができるアプリケーションがあり、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を使用しています

4

1 に答える 1

1

私が見つけた限りでは、エクスプローラーで複数のファイルを選択した場合、Windows は同じコマンド ラインで複数のファイル名を送信しません。一部のアプリケーションでは、プログラムの個別のインスタンスとして開始し、各インスタンスにファイルの 1 つを渡します。

于 2012-05-15T18:12:26.203 に答える