当我点击Qt应用程序上的按钮时,我想启动一个过程。
我使用QProcess::startDetached(..., qint64 * pid)
(http://doc.qt.io/qt-5/qprocess.html#startDetached)创建了一个流程,但我有一个我想要隐藏的控制台。
如何隐藏它?我必须在流程外使用哪个功能?
此代码不会隐藏我的进程控制台(在win32中):
if (AttachConsole((DWORD)m_PID))
{
FreeConsole();
}
答案 0 :(得分:0)
如果你可以重新编译你正在启动的程序,你可能会把它变成一个Windows而不是一个控制台程序(在MSVC中这是项目链接器 - >系统,设置,你想要/SUBSYSTEM:WINDOWS
)。
否则QT start
方法显然从未创建控制台窗口,而startDetached
则会这样做,因此根据您的使用情况,您可能会使用start
。
或者CreateProcess
的{{3}}标志会阻止自动控制台,引用MSDN:
该进程是一个在没有控制台窗口的情况下运行的控制台应用程序。因此,未设置应用程序的控制台句柄。
不幸的是,QT似乎没有提供任何方式来创建或使用带有原生标志的QProcess
或来自原生句柄(例如,没有QProcess process(CreateProcess(...))
),尽管它在几年前建议并拒绝。 CREATE_NO_WINDOW
所以你要么只需要使用Microsoft API,要么找另一个库来进行多进程工作。