使用ShellExecuteEx并捕获标准in / out / err

我正在使用ShellExecuteEx来执行C中的命令。有没有办法使用ShellExecuteEx和捕获标准in / out / err?

注意:我不想使用CreateProcess

正如pilif和Bob所提到的,您需要使用CreateProcess

如果你想要代码包装它,我确实有一个类在这个确切的问题在:

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

类( kGUICallThread )处理Linux,macOS和Windows版本。 代码是LGPL授权的。

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

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

  1. 使用文本编辑器并键入dir> out.txt并将其保存为mybat.bat (* .bat,不要* .txt)

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

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

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

xxx.exe> out.txt

我希望它可以帮助你。 对不起,我的英文真的不好。

不,唯一的方法是使用CreatePipeCreateProcess 请参阅这里的MSDN文章

这是不可能的。 ShellExecuteEx )基本上在shell的上下文中执行应用程序 – 所以你基本上是在做什么浏览器。

捕获STDIN和STDOUT是shell通常不能做的事情,你必须去CreateProcess路由(毕竟,如果要执行的文件是程序而动词是'open', ShellExecute最终会调用这个路径)。 。

CreateProcess是大多数人使用的。

你也可以考虑使用_popen

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