我正在尝试使用第三方程序打开多个文件,方法是从 VB.NET 调用它。默认情况下,我正在使用的程序通过命令行一次只打开一个文件 - 如果我再次调用它,它会打开一个新实例。(在 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 的解决方法,http://helgeklein.com/blog/2010/03/how-to-enable-drag-and-drop-for-an-elevated-mfc-application-on-vistawindows-7/但我对该示例的有限理解(除了我无法使其工作或将其用于我的 vb.net 应用程序的事实)是它适用于在我的应用程序上放置项目,而不是在不同的应用程序上。
我发现的其他东西 - 再一次,它似乎意味着在我的应用程序中删除文件,而不是另一个 - 并且仍然打开该程序的单独实例,我真的不希望这样 - 有类似的东西:
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")
,它打开了许多“程序”实例,而不是在同一个实例中加载所有文件。