2013-10-03 3 views
1

나는 일반적으로 GUI 전용이고 Windows 하위 시스템을 선언하는 Windows 응용 프로그램 응용 프로그램이 있습니다. 실행시 콘솔 창을 열지 않습니다.Windows 하위 응용 프로그램이 선택적 콘솔 출력을 제공 할 수있는 방법이 있습니까?

아아, 콘솔 창 (예 : 대화 형 cmd.exe)에서 응용 프로그램을 시작할 때 추가 콘솔 출력을 제공하고 싶습니다.

일부 프로세스 "체인을 연"에 열린 콘솔이 있는지 감지하고 해당 콘솔에 연결하는 방법이 있습니까?

내가 찾은 가장 가까운 주소는 a way to explicitly open a console for a gui application입니다. 이미 콘솔이 없으면 콘솔을 열고 싶지 않습니다. 언뜻

+1

AttachConsole(). 그것은 항상 불완전하게 작동하며 명령 프로세서가 이미 사용하고 있습니다. 입력을 놓고 싸울 것이고, 명령 프로세서가 먼저 간다. AllocConsole() 만 고려하십시오. –

답변

3

당신이 당신의 부모 프로세스의 콘솔에 연결하게됩니다 AttachConsole() 기능처럼 보인다 : 프로세스가 실제로 함수가 ERROR_INVALID_HANDLE 실패하는 콘솔이 없습니다

AttachConsole(ATTACH_PARENT_PROCESS); 

합니다. 상위 프로세스가 더 이상 존재하지 않으면 함수도 실패합니다. 실패한 경우 AllocConsole()으로 전화하여 직접 만들 수 있습니다.

나는 이것을 시도한 적이 없으므로 실제로 작동하는지 여부를 알지 못합니다.

+1

그것은 작동합니다! 예! * 정확하게 * 내가 찾은 것. 이제는 콘솔에서 출력을 얻는 방법을 알아 보겠습니다. –

+0

이것은 작동하지 않습니다. 음, 콘솔에 출력을 첨부하고 출력 할 수 있습니다. 'printf','cout' 또는 무엇이든하면됩니다. 문제는 이제 콘솔에 두 개의 프로세스가 연결되어 있다는 것입니다. 둘 다 엉망으로 만드는 글을 쓸 수 있습니다. 부모 프로세스는 자식을 기다리지 않으므로 부모가 종료하면 콘솔은 어떻게됩니까? 이 질문은 여러 번 묻습니다. 절대로 잘 끝나지 않습니다. –

+0

@DavidHeffernan : 문서에 따라 콘솔에 연결된 마지막 프로세스가 종료되거나 FreeConsole을 호출하면 콘솔이 닫힙니다. –