65.9K
CodeProject 正在变化。 阅读更多。
Home

重定向

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.94/5 (9投票s)

2000年5月4日

viewsIcon

161303

downloadIcon

2789

一个用于重定向 stdout/stdin 的 ATL 控件

  • 下载演示项目 - 6 Kb
  • 下载源代码 - 21Kb
  • 下载控件 (Windows '98 版本) - 26 Kb
  • 重定向

    此控件可以将控制台应用程序的 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 进行了测试。

    资源

    以下是我用于创建此项目的资源

    1. HOWTO: Spawn Console Processes with Redirected Standard Handles
    2. Redirecting Standard Output to a CEdit Control
    3. Redirect Output of CMD.EXE to a Pipe

    查看我的网站以获取更新。

    © . All rights reserved.