通过管道(CreatePipe)可以返回cmd命令的内容,方法如下 1:窗体代码:Option Explicit Private WithEvents cmdText As clsOutPutCmdTxt Private Sub Command1_Click() Dim strCommandText As String Set cmdText = New clsOutPutCmdTxt cmdText.CommandLine = "cmd /c tracert 181.60.10.10" strCommandText = cmdText.ExecuteCommand MsgBox strCommandText End Sub 2:创建类模块,名称为:clsOutPutCmdTxt代码: Option Explicit '系统常量 Private Const NORMAL_PRIORITY_CLASS = &H20& Private Const STARTF_USESTDHANDLES = &H100& Private Const STARTF_USESHOWWINDOW = &H1 '系统结构体 Private Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Private Type STARTUPINFO cb As Long lpReserved As Long lpDesktop As Long lpTitle As Long dwX As Long dwY As Long dwXSize As Long dwYSize As Long dwXCountChars As Long dwYCountChars As Long dwFillAttribute As Long dwFlags As Long wShowWindow As Integer cbReserved2 As Integer lpReserved2 As Long hStdInput As Long hStdOutput As Long hStdError As Long End Type Private Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessID As Long dwThreadID As Long End Type '系统API声明 Private Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As Any, ByVal nSize As Long) As Long Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, ByVal lpBuffer As String, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As Long, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hHandle As Long) As Long '用户变量 Private mCommand As String '命令行 Private mOutputs As String '返回结果 '用户定义事件 Public Event ReceiveOutputs(CommandOutputs As String) Public Property Let CommandLine(DOSCommand As String) mCommand = DOSCommand End Property Public Property Get CommandLine() As String CommandLine = mCommand End Property Public Property Get Outputs() Outputs = mOutputs End Property Public Function ExecuteCommand(Optional CommandLine As String) As String Dim proc As PROCESS_INFORMATION Dim ret As Long Dim start As STARTUPINFO Dim sa As SECURITY_ATTRIBUTES Dim hReadPipe As Long Dim hWritePipe As Long Dim lngBytesread As Long Dim strBuff As String * 256 If Len(CommandLine) > 0 Then mCommand = CommandLine End If If Len(mCommand) = 0 Then MsgBox "命令行为空。", vbCritical Exit Function End If sa.nLength = Len(sa) sa.bInheritHandle = 1& sa.lpSecurityDescriptor = 0& ret = CreatePipe(hReadPipe, hWritePipe, sa, 0) If ret = 0 Then MsgBox "创建管道失败。错误:" & Err.LastDllError, vbCritical Exit Function End If start.cb = Len(start) start.dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW start.hStdOutput = hWritePipe start.hStdError = hWritePipe ret& = CreateProcessA(0&, mCommand, sa, sa, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc) If ret <> 1 Then MsgBox "文件或命令没有找到。", vbCritical Exit Function End If ret = CloseHandle(hWritePipe) mOutputs = "" Do ret = ReadFile(hReadPipe, strBuff, 256, lngBytesread, 0&) mOutputs = mOutputs & Left(strBuff, lngBytesread) RaiseEvent ReceiveOutputs(Left(strBuff, lngBytesread)) Loop While ret <> 0 ret = CloseHandle(proc.hProcess) ret = CloseHandle(proc.hThread) ret = CloseHandle(hReadPipe) ExecuteCommand = mOutputs End Function