如何在给定PID的情况下隐藏进程的控制台?

时间:2017-09-12 14:18:10

标签: c++ windows qt console win32-process

当我点击Qt应用程序上的按钮时,我想启动一个过程。 我使用QProcess::startDetached(..., qint64 * pid)http://doc.qt.io/qt-5/qprocess.html#startDetached)创建了一个流程,但我有一个我想要隐藏的控制台。

如何隐藏它?我必须在流程外使用哪个功能?

此代码不会隐藏我的进程控制台(在win32中):

if (AttachConsole((DWORD)m_PID))
{
    FreeConsole();
}

1 个答案:

答案 0 :(得分:0)

如果你可以重新编译你正在启动的程序,你可能会把它变成一个Windows而不是一个控制台程序(在MSVC中这是项目链接器 - >系统,设置,你想要/SUBSYSTEM:WINDOWS)。

否则QT start方法显然从未创建控制台窗口,而startDetached则会这样做,因此根据您的使用情况,您可能会使用start


或者CreateProcess的{​​{3}}标志会阻止自动控制台,引用MSDN:

  

该进程是一个在没有控制台窗口的情况下运行的控制台应用程序。因此,未设置应用程序的控制台句柄。

不幸的是,QT似乎没有提供任何方式来创建或使用带有原生标志的QProcess或来自原生句柄(例如,没有QProcess process(CreateProcess(...))),尽管它在几年前建议并拒绝。 CREATE_NO_WINDOW

所以你要么只需要使用Microsoft API,要么找另一个库来进行多进程工作。