我正在使用ShellExecuteEx
在C中执行命令。有没有办法使用ShellExecuteEx
并捕获标准输入/输出/错误?
注意:我不想使用CreateProcess
。
答案 0 :(得分:6)
我用来发现像你这样的问题。
假设您想要从STDOUT捕获由 dir 命令生成的输出,并将捕获的内容保存到 out.txt 中。
使用文字编辑器并输入 dir> out.txt 并使用 mybat.bat 保存(* .bat,不要* .txt)
在您的c / c ++程序中,键入 WinExec(“mybat.bat”,SW_HIDE); 并运行您的应用程序。
打开 out.txt ,您会在当前目录中看到文件夹和文件的名称。
此外,您可以按照以下相同的方式运行任何可执行文件(* .exe)。
xxx.exe> out.txt 强>
我希望它可以帮到你。 对不起,我的英语真的不太好。
答案 1 :(得分:4)
那是不可能的。 ShellExecute
(Ex
)基本上在shell的上下文中执行应用程序 - 所以你基本上就是在做资源管理器所做的事情。
捕获STDIN和STDOUT是shell通常不会做的事情,你必须转到CreateProcess
路由(毕竟,如果要执行的文件,ShellExecute
最终会调用它是一个程序,动词是“开放的”。)
答案 2 :(得分:4)
没有。唯一的方法是使用CreatePipe
和CreateProcess
。请参阅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