2012-10-31 2 views
1

Visual C++에서 Win32 API를 사용하여 콘솔을 AllocConsole으로 할당하고 WriteConsole으로 쓰기 Windows 하위 시스템에서 프로그램을 만들고 싶습니다. 그러나 사용자가 콘솔을 닫으면 프로세스가 백그라운드에서 계속 실행됩니다. 그것이 그대로, 나는 그 일이 일어날 수 없습니다. 콘솔 제목 표시 줄에서 X를 누르면 프로세스가 종료됩니다.사용자가 프로세스를 종료하지 않고 프로세스의 할당 된 콘솔을 닫도록 하시겠습니까?

이렇게하는 특별한 방법이 있습니까?

미리 감사드립니다.

답변

2

키는 사용자가 콘솔을 닫으려고 할 때 발생하는 Console Control Event에 응답하는 것입니다. 그런 다음 FreeConsole으로 전화하여 프로그램을 콘솔에서 분리하고 콘솔을 삭제할 수 있습니다. 그 프로그램을 계속 실행해야합니다.

추가 정보 : 예상대로 HandlerRoutine 종료이 후, 내 제안이 작동하지 않았을 때

는 프로세스가 종료됩니다. 그렇다면 문제가있을 수 있습니다. SC_CLOSE 시스템 메시지를 연결하고 메시지를 전달하기 전에 FreeConsole을 수행 할 수 있습니다. 그 일 수도 있지만 사용자가 Ctrl + C 또는 Ctrl + Break를 누르면 어떻게 될지 모르겠다.

문제는 컨트롤 처리기가 프로세스를 종료한다는 것입니다. HandlerRoutine에있는 FreeConsole 전화가 너무 늦었을 수 있습니다.

+0

감사합니다. 핸들러 루틴을 만들었고 모든 것이 잘 진행되고 있습니다. 단지 하나의 마지막 질문입니다. HandlerRoutine 함수의 범위에서 다른 모든 작업을해야 할 것 같습니다. 반환 할 때 프로세스가 자동으로 종료되기 때문입니다. 적어도 그것은 내가 보는 것입니다. (http://pastebin.com/LHUa3SFh, 메시지 상자를 생성 한 후 프로세스가 종료되는 기본 코드를 참조하십시오.) 다시 한번 감사드립니다! – Archimaredes

+0

그 주석에 추가 할 수있는 경우 : 주 코드가 계속 진행되는 동안 무한 루프에서 HandlerRoutine을 유지할 수 있으므로 불필요한 것일 수 있습니다. – Archimaredes

+0

@Archimaredes : 내 추가 정보 참조. –

관련 문제