VB中截获shell程序的输出_转发
CreatePipe(hReadPipe, hWritePipe, sa, 0) 这一行代码创建了一个管道对,其中`hReadPipe`是用于读取数据的一端,`hWritePipe`是用于写入数据的一端。`sa`是安全属性结构,设置为可继承句柄,这样子进程(shell程序)就可以访问到这个管道。`CreatePipe`失败时,程序会给出错误提示。 start.hStdOutput = hWritePipe 和 start.hStdError = hWritePipe 将shell程序的标准输出和标准错误输出重定向到我们创建的管道`hWritePipe`。这意味着shell程序的所有输出都会被发送到这个管道,而不是默认的显示器。 start.wShowWindow = SW_HIDE 隐藏shell程序的窗口,使得用户看不到程序的执行过程,仅获取其输出。 CreateProcessA 函数用于启动新的进程,这里的`sCmdline`参数是需要执行的shell程序及其参数。`sa`和`sa`参数分别表示进程的安全属性和线程的安全属性,`True`表示子进程继承父进程的句柄,其他参数设置进程的优先级类别等。 在子进程启动后,关闭写入端`hWritePipe`,因为不再需要向shell程序写入数据。接着通过循环调用`ReadFile`从读取端`hReadPipe`读取数据,每次读取256个字节,并将读取到的内容追加到`sOutput`变量中,直到没有更多数据可读。 释放所有打开的句柄,包括子进程和线程的句柄,以及读取和写入管道的句柄,函数返回`sOutput`作为shell程序的输出结果。 通过这个函数,VB程序可以方便地启动shell程序,如编译器或解释器,并捕获其输出,这对于构建IDE或自动化脚本来说非常有用。例如,你可以创建一个自定义的IDE,当用户点击“编译”按钮时,IDE在后台调用编译器,然后解析编译器的输出,提供错误提示和警告信息,而无需用户直接与命令行界面交互。这种做法提高了用户体验,使得程序的输出更容易理解,同时避免了输出信息的混乱。
剩余10页未读,继续阅读
- zhhk1h2013-09-30不错,很好用
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助