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