サードパーティ プログラムを 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")
に、すべてのファイルを同じインスタンスにロードする代わりに、多くの「プログラム」のインスタンスを開きました。