1

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

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

我用过

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

获取控制台窗口并在 的HWND部分中传递它ShellExecute(),但这不起作用。

4

1 回答 1

5

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

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

所以它不会对控制台应用程序产生任何影响。

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

于 2010-04-07T22:15:53.293 回答