将非控制台Win32应用程序附加到调用的cmd shell是否可能?

7
当我拥有一个Win32的非控制台应用程序(据我所知,Win32应用程序的控制台性质与exe文件链接在一起),从控制台cmd.exe启动它将立即返回到命令提示符,并在“后台”运行该应用程序(它可以有某种GUI,甚至打开自己的控制台窗口)。
在非控制台可执行文件中,是否可能检测到它是从cmd.exe启动并将其“附加”到启动的cmd.exe?
请注意,虽然与此相关的问题/答案很多,但似乎还没有调查过这个确切的方法。(也许不可能这样做。)

1
实际上它并不好用,你的用户必须使用“start /wait yourapp.exe”来避免进程争夺控制台。简单而从未失败的方法是在路径中放置一个/ Subsystem:Console构建的应用程序。 - Hans Passant
1个回答

6
你可以很容易地完成这个操作。只需将ATTACH_PARENT_PROCESS传递给AttachConsole即可。
不管最终结果是否明智或实用,我不能说。两个进程都会读写相同的控制台,这可能会变得相当奇怪。

这有道理吗?cmd.exe进程不会意识到已连接的其他进程,对吧?两个进程将独立地从同一控制台写入和读取? - Martin Ba
我不确定这样做是否有意义。就像你说的一样,两个进程都可以使用同一个控制台。 - David Heffernan
如果有人关闭了控制台窗口,与其相关联的应用程序也会被关闭。 - Jim Mischel

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