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

alr*_*edf 10 c c++ windows winapi

我正在用ShellExecuteExC执行命令.有没有办法使用ShellExecuteEx和捕获标准输入/输出/错误?

注意:我不想用CreateProcess.

小智 7

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

假设,您希望从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

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


pil*_*lif 6

那是不可能的。ShellExecute( Ex) 基本上在 shell 上下文中执行应用程序 - 因此您基本上正在执行资源管理器所做的事情。

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


Bob*_*ore 6

不可以。执行此操作的唯一方法是使用CreatePipeCreateProcess请参阅此处的MSDN 文章


KPe*_*xEA 4

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

如果您想要为您包装所有内容的代码,我确实有一个针对此确切问题的课程,网址为:

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

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