2013-05-29 5 views
1

Windows에서 콘솔 에뮬레이터를 쓰고 싶습니다. GUI 응용 프로그램에서 cmd.exe (SW_HIDE 사용)를 시작한 다음 AttachConsole을 시작해야합니다.어떻게/언제 할 수 있습니다 AttachConsole 반환 된 dwProcessId CreateProcess 사용하여

// cmdline is a writable L"cmd" 
// start_info contains a SW_HIDE 
PROCESS_INFORMATION proc_info; 
CreateProcess(NULL, cmdline, NULL, NULL, false, 0, NULL, NULL, &start_info, &proc_info); 
AttachConsole(proc_info.dwProcessId); 

그러나 AttachConsole는 "the specified process does not exist"를 나타낸다 ERROR_GEN_FAILURE (31), 실패.

CreateProcess가 반환되면 AttachConsole이 문제를 해결하기 전에 Sleep(100);을 추가 했으므로 cmd.exe의 콘솔이 완전히 초기화되지 않은 것으로 보입니다.

그래서 임의 번호를 Sleep하지 않고 AttachConsole을 기다릴 수있을 때까지 기다릴 수 있습니까?

답변

0

아마도 의사 소통 할 수있는 도우미 콘솔 앱을 작성할 수 있습니다. 주 앱이 시작될 때 (콘솔이 생성 될 때까지) 기본 앱에 신호를 보낼 수 있습니다. 기본 앱은 "실제"하위 콘솔 앱을 생성하는 방법을 도우미에게 알릴 수 있습니다. 기본 라이브러리가없는 C로 작성된 경우, 도우미는 단지 몇 KB의 크고 많은 오버 헤드가 될 수 있습니다.

0

AttachConsole이 돌아 오는 동안 루프 할 수 있습니다. ERROR_GEN_FAILURE