使用ShellExecuteEx并捕获标准输入/输出/错误

时间:2009-01-22 13:40:19

标签: c++ c windows winapi

我正在使用ShellExecuteEx在C中执行命令。有没有办法使用ShellExecuteEx并捕获标准输入/输出/错误?

注意:我不想使用CreateProcess

5 个答案:

答案 0 :(得分:6)

我用来发现像你这样的问题。

假设您想要从STDOUT捕获由 dir 命令生成的输出,并将捕获的内容保存到 out.txt 中。

  1. 使用文字编辑器并输入 dir> out.txt 并使用 mybat.bat 保存(* .bat,不要* .txt)

  2. 在您的c / c ++程序中,键入 WinExec(“mybat.bat”,SW_HIDE); 并运行您的应用程序。

  3. 打开 out.txt ,您会在当前目录中看到文件夹和文件的名称。

  4. 此外,您可以按照以下相同的方式运行任何可执行文件(* .exe)。

    xxx.exe> out.txt

    我希望它可以帮到你。 对不起,我的英语真的不太好。

答案 1 :(得分:4)

那是不可能的。 ShellExecuteEx)基本上在shell的上下文中执行应用程序 - 所以你基本上就是在做资源管理器所做的事情。

捕获STDIN和STDOUT是shell通常不会做的事情,你必须转到CreateProcess路由(毕竟,如果要执行的文件,ShellExecute最终会调用它是一个程序,动词是“开放的”。)

答案 2 :(得分:4)

没有。唯一的方法是使用CreatePipeCreateProcess。请参阅MSDN文章here

答案 3 :(得分:2)

正如pilif和Bob所说,你需要使用CreateProcess

如果您希望代码能够为您提供所有内容,我确实有一个针对此问题的课程:

http://code.google.com/p/kgui/source/browse/trunk/kguithread.cpp

类(kGUICallThread)处理Linux,macOS和Windows版本。该代码已获得LGPL许可。

答案 4 :(得分:1)

CreateProcess是大多数人使用的。

您可能还想考虑使用_popen

http://msdn.microsoft.com/en-us/library/96ayss4b%28VS.80%29.aspx