Qtアプリケーションのボタンをクリックすると、プロセスを開始したいと考えています。 QProcess::startDetached(..., qint64 * pid)
(http://doc.qt.io/qt-5/qprocess.html#startDetached)でプロセスを作成しましたが、私は隠したいコンソールがあります。PIDを指定してプロセスのコンソールを隠すには?
どのように非表示にするには?どの機能をプロセス外で使用する必要がありますか?
このコードは(Win32では)私のプロセスのコンソールを隠さない:
if (AttachConsole((DWORD)m_PID))
{
FreeConsole();
}
'CREATE_NO_WINDOW'は、' STARTUPINFO'を使って隠しコンソールウィンドウを作成する代わりに使用できます。新しいコンソール(つまり、conhost.exeのインスタンス)が作成され、プロセスの標準ハンドルがコンソールの入力バッファとスクリーンバッファに設定され、プロセスのコンソールハンドルが新しいコンソールを参照するため、コンソール機能が正常に動作します。コンソールがウィンドウを作成しないので、 'GetConsoleWindow'は' NULL'を返します。このフラグは、 'CREATE_NEW_CONSOLE'と' CreateProcessWithLogonW'や 'CreateProcessWithTokenW'のように後者を暗黙的に使用する関数では無視されます。 – eryksun
それはどこに直接書かれていますか?ただし、GUIプロセスの場合、最初に 'ShowWindow'が呼び出され、' nCmdShow'パラメータは無視されます。 'wShowWindow'はデフォルト値を指定しますが、「コンソールプロセスの場合は、プロセスの新しいコンソールが作成された場合、その情報はコンソールウィンドウに影響します。 idはそれがコンソールホストに渡され、そのわずかに異なる振る舞いでよく定義されていると推測します。 –
'STARTUPINFO'の使用は、子プロセスが新しいコンソールを作成する場合、つまり' CREATE_NEW_CONSOLE'と組み合わされている場合には常に有効です。ウィンドウは隠されているので、アプリケーションはハンドルを取得して表示できます。 'CREATE_NO_WINDOW'アプローチは暗黙的に新しいコンソールを作成し、これまでに表示できるウィンドウはありません。ドキュメンテーションに関しては、私は "[t]のようなものを言っているアプリケーションからコンソールのハンドルが設定されていない"という誤った記述や非常にひどく記述されたことがどれほど意味があるか分かりません。 – eryksun