2012-06-18 3 views
0

콘솔 응용 프로그램을 호출하는 새 프로세스를 만들고 있습니다. 이 자식 프로세스의 콘솔 창 색상을 변경하고 싶습니다.자식 프로세스의 콘솔 색 변경

이유는 응용 프로그램이 콘솔 커서를 조작하기 때문에 콘솔의 표준 출력을 리디렉션 할 수 없기 때문입니다. 대신 콘솔 프레임을 벗기고 원하는 정보를 잘라 내고 콘솔을 내 응용 프로그램 도매에 포함합니다. 색상을 바꿔서 더 잘 들어 맞 춥니 다.

나는 SetConsoleTextAttribute 함수를 알고 있지만 그것을 사용하는 자식 프로세스의 stdout 핸들을 얻는 방법을 모른다.

누구든지 아이디어가 있습니까?

답변

2

으로 DuplicateHandle에 대한 문서는 말한다 : 당신이에 코드를 주입 ​​할 수 있도록 경우에도

콘솔 핸들 (그들은 실제 핸들 없음)는 동일한 공정

에 사용하기 위해 복제 할 수 아이는이 길로 내려갈 수 없었습니다.

이미 그런 경우가 있다면 당신은 AllocConsole(), GetStdHandle(), SetConsoleTextAttribute(), CreateProcess()을 사용할 수 있어야합니다, (당신은 끔찍한 해킹을하지 않고 프로세스 당 하나를 가질 수) 콘솔이없는 부모 응용 프로그램을 가정하고있어 cmd를 color /?을 실행하여 cmd.exe /T:?? /C childapplication.exe가 (찾을 색 값 ?? 교체 : 마지막으로 FreeConsole()

다른 옵션은 cmd.exe를 사용하는 것입니다 (당신은 단지 한 번에 하나의 자식 프로세스를 실행하는 경우 FreeConsole 필요하지 않습니다))

+0

부모 응용 프로그램에 콘솔이 없으므로이 핸들을 상속해야합니까? 일하다? 나는 cmd/T 접근법에 대해 생각해 보았지만 나의 첫 번째 선택은 win32 api를 사용하여 수행하는 것입니다. – Phyx

+0

아니요, 자식 프로세스는 CreateProcess에 이상한 플래그를 전달하지 않는 한 같은 콘솔에서 시작해야합니다 ... – Anders

+0

큰 오늘 아침에 가서 실행으로 응답으로 표시합니다. 감사! – Phyx