在C中,我之前在控制台应用程序中使用了system()
函数,如果我使用system()
启动另一个进程,它将继承调用它的进程的控制台窗口。
在Delphi system()
中不存在,因此我使用ShellExecute()
创建新进程,但新进程出现在新的控制台窗口中。有什么方法可以让它继承正在调用它的窗口的句柄吗?
我用过
function GetConsoleWindow(): HWND; stdcall; external 'kernel32.dll';
获取控制台窗口并将其传递到HWND
的{{1}}部分,但这不起作用。
答案 0 :(得分:5)
使用ShellExecute()
您将无法使衍生的应用程序使用相同的控制台。 HWND
调用中的ShellExecute()
元素已记录在案:
指定父窗口。此窗口接收应用程序生成的任何消息框。例如,应用程序可能会通过生成消息框来报告错误。
所以它对控制台应用程序没有任何影响。
如果您使用CreateProcess()
,则可以更好地控制衍生过程。通过使用dwCreationFlags
参数,您可以强制新进程获取自己的控制台(使用CREATE_NEW_CONSOLE
标志),但默认情况下它也将继承父进程的控制台。