Skip to content

cStdIO 方法参考

ExecuteCommand

执行命令行程序并捕获其标准输出。

vb
Public Function ExecuteCommand( _
    ByVal CommandLine As String, _
    Optional ByVal TimeoutMs As Long = 10000, _
    Optional ByVal CurrentDirectory As String = "", _
    Optional ByRef exitCode As Long _
) As String

参数

参数名类型默认值说明
CommandLineString-要执行的命令行(包含程序路径和参数)
TimeoutMsLong10000超时时间(毫秒),默认 10 秒
CurrentDirectoryString""工作目录,空字符串表示使用当前目录
exitCodeLong-传出参数,进程退出代码

返回值

  • 成功 - 返回命令行的标准输出文本
  • 失败 - 返回错误描述字符串(以 "STDIO ERROR:" 开头)

错误码

通过 exitCode 参数返回的错误码:

错误码常量说明
0ERROR_OK执行成功
1ERROR_CREATE_PIPE创建管道失败
2ERROR_DUPLICATE_HANDLE复制句柄失败
3ERROR_CREATE_PROCESS创建进程失败
4ERROR_READ_OUTPUT读取输出失败
5ERROR_PROCESS_TIMEOUT执行超时

示例

基本用法

vb
Dim StdIO As New cStdIO
Dim Output As String
Dim ExitCode As Long

Output = StdIO.ExecuteCommand("echo Hello World", 5000, "", ExitCode)
Debug.Print Output  ' 输出: Hello World

带参数的命令

vb
Dim StdIO As New cStdIO
Dim Output As String
Dim ExitCode As Long

' 执行带参数的命令
Output = StdIO.ExecuteCommand( _
    "findstr /s /i ""keyword"" *.txt", _
    10000, _
    "C:\\Documents", _
    ExitCode _
)

If ExitCode = 0 Then
    Debug.Print "找到匹配:" & Output
Else
    Debug.Print "未找到匹配"
End If

完整错误处理

vb
Private Sub ExecuteSafe()
    Dim StdIO As New cStdIO
    Dim Result As String
    Dim ExitCode As Long
    
    On Error GoTo ErrorHandler
    
    Result = StdIO.ExecuteCommand("mycommand.exe", 5000, "", ExitCode)
    
    ' 检查是否返回错误字符串
    If Left$(Result, 11) = "STDIO ERROR" Then
        MsgBox "执行错误:" & Result, vbCritical
        Exit Sub
    End If
    
    ' 检查退出码
    Select Case ExitCode
        Case 0
            Debug.Print "执行成功:" & Result
        Case 1
            Debug.Print "命令返回错误:" & Result
        Case 5
            MsgBox "执行超时!", vbExclamation
        Case Else
            Debug.Print "未知错误,退出码:" & ExitCode
    End Select
    
    Exit Sub
    
ErrorHandler:
    MsgBox "发生异常:" & Err.Description, vbCritical
End Sub

指定工作目录

vb
Private Sub RunInDirectory()
    Dim StdIO As New cStdIO
    Dim Output As String
    Dim ExitCode As Long
    
    ' 在指定目录下执行 git 命令
    Output = StdIO.ExecuteCommand( _
        "git log --oneline -10", _
        10000, _
        "D:\\Projects\\MyRepo", _
        ExitCode _
    )
    
    If ExitCode = 0 Then
        txtLog.Text = Output
    End If
End Sub

VB6及其LOGO版权为微软公司所有