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

时间:2010-04-07 21:36:32

标签: delphi shellexecute

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

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

我用过

function GetConsoleWindow(): HWND; stdcall; external 'kernel32.dll';

获取控制台窗口并将其传递到HWND的{​​{1}}部分,但这不起作用。

1 个答案:

答案 0 :(得分:5)

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

  

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

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

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