1

サードパーティ プログラムを VB.NET から呼び出して、複数のファイルを開こうとしています。デフォルトでは、私が使用しているプログラムは、コマンド ラインから一度に 1 つのファイルしか開きません。もう一度呼び出すと、新しいインスタンスが開きます。(GUIで起動すると、多くのファイルをドロップできます)。

今、私はそれを開きます

Shell("program file")

プログラムが実行中の場合、新しいインスタンスを開始するのではなく、実行中のインスタンスの上に「ファイル」を追加したいと考えています。

何かのようなもの:

If Not procExists then
    Shell("program file")
else
   'I want to drop "file" onto running "program" (or procNumber since I have it)
End If

VB.NETまたはc#のドラッグアンドドロップコードの例を見つけようとしましたが、理解できるものを見つけることができませんでした-WM_DROPFILESと、Windows 7では機能しない可能性があるという事実について読みました(これはまさに私が動作する必要があります)。MFCの回避策も見つけました。しかし、その例についての私の限られた理解 (動作させることができない、または vb.net アプリケーションに使用できないという事実を除いて) は、別のアプリケーションではなく、MY アプリケーションにアイテムをドロップすることに適用されるということです。

私が見つけた他の何か-そして、別のアプリケーションではなく、MYアプリケーションにファイルをドロップすることを意図しているようですが、それでもそのプログラムの別のインスタンスを開きますが、私は本当にそれを望んでいません-次のようなものがあります:

Public Const WM_DROPFILES As Integer = 563
Private Declare Sub DragFinish Lib "Shell32.dll" (ByVal hdrop As IntPtr)
Private Declare Function DragAcceptFiles Lib "shell32.dll" (ByVal hwnd As IntPtr, ByVal accept As Boolean) As Long
Private Declare Function DragQueryFile Lib "shell32.dll" (ByVal hdrop As IntPtr, ByVal ifile As Integer, ByVal fname As System.Text.StringBuilder, ByVal fnsize As Integer) As Integer

Public Sub HandleDroppedFiles(ByVal file As String)
    If Len(file) > 0 Then
        'do something but what ? If I call the program, it will open a new instance
    End If
End Sub

作業できる WM_DROPFILES やその他の例はどこで入手できますか?

編集:提案された回答を使用して、試しました:

For Each filename in filelist
  System.Diagnostics.Process.Start(program, filename)
Next

残念ながら、 と同じようShell("program filename")に、すべてのファイルを同じインスタンスにロードする代わりに、多くの「プログラム」のインスタンスを開きました。

4

1 に答える 1

2

ショートカットにファイルをドロップしても、Windows は特に何もしません。プログラムを起動し、ドロップされたファイルへのパスをコマンド ライン引数として渡すだけです。これはカスタマイズできますが、あまり一般的ではありません。

D+D をシミュレートするというほぼ不可能なタスクよりも、はるかに簡単に作業を開始できます。

  System.Diagnostics.Process.Start("program file", file);

ファイルへのフル パス (c:\foo\bar.baz など) を渡すようにしてください。増分パスは機能しません。

于 2012-06-16T01:37:56.303 に答える