重定向






4.94/5 (9投票s)
2000年5月4日

161303

2789
一个用于重定向 stdout/stdin 的 ATL 控件
重定向
此控件可以将控制台应用程序的 stdin/stdout 重定向到你的程序。甚至可以将 MS-DOS 命令重定向到你的应用程序。 我使用 Visual C++ 6.0 和 ATL 3.0 编写了这个项目,因为你不能在 Visual Basic 中使用多线程。
Application 对象的属性
名称 | 类型 | 读/写 | 描述 |
---|---|---|---|
缓冲区大小 | 整数 | 读/写 | 返回或设置用于读取 stdout 的缓冲区大小。 默认值为 8192。 |
LastErrorNumber | 长整型 | 读取 | 返回上一个 Windows 错误号。 |
名称 | 字符串 | 读/写 | 控制台应用程序的名称。 |
运行 | 布尔值 | 读取 | 如果控制台应用程序正在运行,则返回 true。 |
Wait | 长整型 | 读/写 | 设置等待检查 stdout 的毫秒数。 如果控制台应用程序运行时间很长,请确保设置此属性,否则你的程序将没有足够的时间来处理其他任务。 |
Application 对象的方法
名称 | Returns | 参数 | 描述 |
---|---|---|---|
Start | eStartResult | / | 启动控制台应用程序。 如果控制台应用程序已启动,则返回 laAlreadyRunning。 发生错误时返回 laWindowsError。 控制台应用程序正确启动时返回 laOk。 |
停止 | / | 停止控制台应用程序。 | |
Write | 布尔值 | Byval sCommandString As String | 将 sCommandString 写入控制台应用程序的 stdin。 发生错误时返回 false。 |
Application 对象的事件
名称 | 参数 | 描述 |
---|---|---|
DataReceived | sData As String | 来自控制台应用程序 stdout 的数据。 |
ProcessEnded | / | 控制台应用程序已结束。 |
示例
以下 VB 示例在 Windows'98 中启动 MS-DOS 提示符并执行 dir 命令。 接收到的数据将显示在 TextBox 中。
Dim WithEvents oLaunch As redirectlib.Application Set oLaunch = New redirectlib.Application oLaunch.BufferSize = 8192 oLaunch.Wait = 1000 oLaunch.Name = "c:\windows\command.com" Select Case oLaunch.Start Case laAlreadyRunning MsgBox "Already running !" Case laWindowsError MsgBox "Windows error: " & CStr(oLaunch.LastErrorNumber) & "!" Case laOk oLaunch.Write "dir" + vbCrLf oLaunch.Write "exit" + vbCrLf End Select Private Sub oLaunch_DataReceived(ByVal sData As String) txtOutput.Text = txtOutput.Text + sData txtOutput.SelStart = Len(txtOutput.Text) End Sub Private Sub oLaunch_ProcessEnded() MsgBox "Program stopped" End Sub
备注
当你在 Windows NT (cmd.exe) 中使用 MS-prompt 时,你可以使用 Stop 方法停止控制台应用程序。 但是,在 Windows '98 中,这不起作用。 我不知道为什么。 你可以通过将“exit”命令写入控制台应用程序的 stdin 来解决此问题。 其他控制台应用程序在 NT 和 '98 中都可以正常工作。
该控件已在 Windows NT 和 Windows '98 上进行了测试。
该控件使用 Visual C++ 6.0 和 ATL 3.0 编写。 该控件已使用 Visual Basic 6.0 进行了测试。
资源
以下是我用于创建此项目的资源
- HOWTO: Spawn Console Processes with Redirected Standard Handles
- Redirecting Standard Output to a CEdit Control
- Redirect Output of CMD.EXE to a Pipe
查看我的网站以获取更新。