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

11

我正在使用ShellExecuteEx命令在C语言中执行一个命令。有没有一种方法可以同时使用ShellExecuteEx并捕获标准输入/输出/错误输出?

注意:我不想使用CreateProcess命令。

5个回答

8

我曾经遇到了和你类似的问题。

假设你想要捕获由dir命令生成的标准输出(STDOUT),并将其保存到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

希望这对你有所帮助。
抱歉,我的英语真的不好。


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

5

这是不可能的。 ShellExecute(Ex) 基本上在 shell 的上下文中执行应用程序 - 所以你基本上正在做 explorer 所做的事情。

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


4
如pilif和Bob所提到的,您需要使用CreateProcess
如果您想要一个将所有内容包装起来的代码,我确实有一个针对这个问题的类,位于: http://code.google.com/p/kgui/source/browse/trunk/kguithread.cpp
该类(kGUICallThread)处理Linux、macOS和Windows版本。该代码的许可证为LGPL。

1
我相信代码已经移动到这里:https://github.com/CarlHuff/kgui/blob/master/kguithread.cpp - Noam Rathaus

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接