【发布时间】:2010-10-02 22:04:43
【问题描述】:
我正在使用 ShellExecuteEx 在 C 中执行命令。有没有办法使用 ShellExecuteEx 并捕获标准输入/输出/错误?
注意:我不想使用CreateProcess。
【问题讨论】:
我正在使用 ShellExecuteEx 在 C 中执行命令。有没有办法使用 ShellExecuteEx 并捕获标准输入/输出/错误?
注意:我不想使用CreateProcess。
【问题讨论】:
我曾经像你一样发现问题。
假设,您想从 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
希望对你有所帮助。 对不起,我的英语真的不好。
【讨论】:
没有。这样做的唯一方法是使用CreatePipe 和CreateProcess。请参阅 MSDN 文章here
【讨论】:
这是不可能的。 ShellExecute(Ex) 基本上是在 shell 的上下文中执行应用程序 - 所以你基本上是在做 explorer 所做的事情。
捕获 STDIN 和 STDOUT 是 shell 通常不做的事情,你将不得不走 CreateProcess 路线(毕竟,如果要执行的文件是一个程序和动词是“开放”)。
【讨论】:
正如 pilif 和 Bob 所说,您需要使用 CreateProcess。
如果您想要为您打包的代码,我确实有一个针对这个确切问题的课程:
http://code.google.com/p/kgui/source/browse/trunk/kguithread.cpp。
类 (kGUICallThread) 处理 Linux、macOS 和 Windows 版本。该代码已获得 LGPL 许可。
【讨论】:
CreateProcess 是大多数人使用的。
您可能还想考虑使用 _popen
http://msdn.microsoft.com/en-us/library/96ayss4b%28VS.80%29.aspx
【讨论】: