ShellExecute / Shell等没有做我需要的

时间:2015-12-07 20:14:53

标签: vba access-vba

嗯,我确定它在那里,但我无法找到它..

我想要一个程序(来自Access VBA),然后等待它完成。有一些使用Shell的例子,但看起来像Shell,你必须传递可执行文件,而不仅仅是文件路径/名称。由于这将在多台机器上使用,我无法保证目标机器上的可执行文件(例如,设置了哪个pdf查看器),因此我想使用默认值。

我可以使用Shellexecute使用默认程序启动文件,但是我无法获得窗口句柄来运行等待例程。由于我需要运行多个外部部件,因此我需要等待每个部件完成才能启动下一部件。

因此。任何人都可以帮我理解如何让Shell使用默认程序或如何获取Shellexecute窗口的句柄或建议另一个API来完成我需要的所有部分?

谢谢 - 艾伦

1 个答案:

答案 0 :(得分:4)

以下例程根据注册表中的关联以阻止模式打开文件:

Sub OpenFileAndWait(fullName As String)
    CreateObject("WScript.Shell").Run """" & fullName & """", 3, True
End Sub

ps.1:param 3在最大化窗口中打开文档,最后一个参数True指定等待模式。用双引号括起文件的名称消除了包含" space"的名称的麻烦。用于命令解释器。

ps.2: 关于如何实现这一点已经有很多讨论,并且所提出的方法将您带到复杂的API,例如ShellExecuteExCreateProcessWaitForSingleObject等,每次使用不同的参数集和缺点。这些方法都不完整且令人满意:某些API(ShellCreateProcess)需要指定可执行应用程序,而其他API(ShellExecuteShellExecuteEx)可以使用文件关联,但唉,它们是非阻塞的,获取进程句柄以使用WaitForSingleObject)非常复杂。