【问题标题】:Drag-and-drop from my program to third-party program in vb.net从我的程序拖放到 vb.net 中的第三方程序
【发布时间】:2012-06-19 04:55:31
【问题描述】:

我正在尝试使用第三方程序打开多个文件,方法是从 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") 一样,它打开了许多“程序”实例,而不是在同一个实例中加载所有文件。

【问题讨论】:

    标签: vb.net drag-and-drop execute


    【解决方案1】:

    当您将文件拖放到快捷方式上时,Windows 不会做任何引人注目的事情。它只是启动程序并将放置文件的路径作为命令行参数传递。这可以自定义,但不是很常见。

    所以只要做 Windows 做的事,比模拟 D+D 几乎不可能完成的任务要容易得多:

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

    请务必将完整路径传递给文件(如 c:\foo\bar.baz),增量路径将不起作用。

    【讨论】:

    • 我已经尝试过上述选项(请参阅问题编辑),但据我所知,它完全符合 Shell("program filename") 所做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多