【问题标题】:How do I call a Windows shell command using VB6?如何使用 VB6 调用 Windows shell 命令?
【发布时间】:2008-11-14 18:05:16
【问题描述】:

究竟如何使用 VB6 才能像从命令行一样调用任何 Windows shell 命令?

例如,一些微不足道的事情:

echo foo

【问题讨论】:

    标签: windows command-line vb6


    【解决方案1】:

    这是你的做法:

    Shell "cmd echo foo", vbNormalFocus 
    

    【讨论】:

      【解决方案2】:

      我一直使用 wshShell 对象的 Run 方法,在您在项目中引用 Windows 脚本宿主对象模型后可用:

      Dim shell As wshShell
      Dim lngReturnCode As Long
      Dim strShellCommand As String
      
      Set shell = New wshShell
      
      strShellCommand = "C:\Program Files\My Company\MyProg.exe " & _
         "-Ffoption -Ggoption"
      
      lngReturnCode = shell.Run(strShellCommand, vbNormalFocus, vbTrue)
      

      您将获得与普通 Shell 语句相同的功能,但最后一个参数让您决定是否同步运行带壳程序。使用 vbTrue 的上述调用是同步的。使用 vbFalse 异步启动程序。

      并且,如前面的答案所述,您需要使用“/c”开关运行命令外壳来执行内部命令,例如您问题中的“echo foo”。您将“cmd /c echo foo”发送到 Run 方法。

      【讨论】:

      • lngReturnCode = shell.Run(strShellCommand, vbNormalFocus, vbTrue)
      • 谢谢,@nh32rg。固定的。这是一个存在超过 4 年的错误。
      • 此代码适用于问题中所问的 vbScript 而不是 VB6。对于只了解 VB6 并正在寻找 VB6 问题答案的人来说,这可能会非常令人困惑。
      【解决方案3】:

      Shell 和 ShellExecute?

      http://msdn.microsoft.com/en-us/library/aa242087.aspx

      Dim RetVal
      RetVal = Shell("C:\WINDOWS\CALC.EXE", 1)   ' Run Calculator.
      

      【讨论】:

        【解决方案4】:
        Shell "cmd /c echo foo"
        

        【讨论】:

          【解决方案5】:

          所有的组合

          Shell Environ("COMSPEC") & " /c echo foo", vbNormalFocus
          

          如果您希望支持 Windows 9x 或 me 等早期系统,您应该考虑扩展 COMSPEC 环境变量。

          你也可以使用

          获取进程id
          pid = Shell(Environ("COMSPEC") & " /c echo foo", vbNormalFocus)
          

          【讨论】:

            【解决方案6】:

            只使用双引号:""...""

            示例 - 发送确认通行证以完成任务:

            shell (""echo pass|schtasks /create /TR "C:\folder\...\program.exe" /more_parameters"")
            

            因为第一个""C:\... 中关闭并且字符串会停止。

            【讨论】:

            • 这不会通过语法检查,样式也不正确。 " 开始和结束一个字符串。"" 在字符串内部添加一个引号。"" 在字符串外部表示一个零长度字符串。另外,在 VB6 中,您不要将子参数放在括号中。所以这一行将无法编译。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-05
            • 1970-01-01
            • 2013-01-31
            • 2013-04-01
            • 1970-01-01
            相关资源
            最近更新 更多