使用Delphi的ShellExecute()继承原始控制台的进程?

1 delphi shellexecute

在C中,我system()之前在控制台应用程序中使用了该函数,如果我使用system()它启动另一个进程,则继承调用它的进程的控制台窗口.

在Delphi system()中不存在所以我ShellExecute()用来创建一个新进程,但新进程出现在一个新的控制台窗口中.有什么方法可以让它继承正在调用它的窗口的句柄?

我用过

function GetConsoleWindow(): HWND; stdcall; external 'kernel32.dll';
Run Code Online (Sandbox Code Playgroud)

获取控制台窗口并将其传递给HWND部分ShellExecute(),但这不起作用.

mgh*_*hie 5

使用ShellExecute()您将无法使衍生的应用程序使用相同的控制台.调用中的HWND元素ShellExecute()记录在案:

指定父窗口.此窗口接收应用程序生成的任何消息框.例如,应用程序可能通过生成消息框来报告错误.

所以它对控制台应用程序没有任何影响.

如果您使用,CreateProcess()则可以更好地控制衍生过程.通过使用该dwCreationFlags参数,您可以强制新进程获取其自己的控制台(使用该CREATE_NEW_CONSOLE标志),但默认情况下,它也将继承父进程的控制台.