2012-06-18 4 views
0

Я создаю новый процесс, который вызывает консольное приложение. Я хочу изменить цвета окна консоли этого дочернего процесса.Изменить цвет консоли дочернего процесса

Причина в том, что я не могу перенаправить консоль, поскольку приложение управляет курсором консоли. Вместо этого я снимаю консольный фрейм, обрезая информацию, которую хочу, и встраиваю консоль в свое приложение оптом. Я просто хочу изменить цвета, чтобы он лучше вписывался.

Я знаю о функции SetConsoleTextAttribute, но я не знаю, как добраться до дескриптора stdout дочернего процесса, чтобы использовать его.

У кого-нибудь есть идеи?

ответ

2

Документация DuplicateHandle говорит:

Консольные ручки могут быть продублированы для использования только в том же процессе

(Они не настоящие ручки), так что даже если вы могли бы вводить код в блок ребенка, вы не смогли бы спуститься по этому маршруту.

Я предполагаю, что родительское приложение еще не имеет консоли (Вы можете иметь только один для каждого процесса, не делая ужасные хаки), если это так, вы должны быть в состоянии использовать AllocConsole(), GetStdHandle(), SetConsoleTextAttribute(), CreateProcess() и наконец FreeConsole() (Вам не нужно FreeConsole, если вы только запустить один дочерний процесс в то время)

другой вариант заключается в использовании cmd.exe: cmd.exe /T:?? /C childapplication.exe (Заменить ?? с цветовыми значениями, вы найдете, запустив color /? в ЦМД)

+0

Да, у родительского приложения нет консоли, мне нужно наследовать ручки для этого работать? Я подумал о подходе cmd/T, но мой первый выбор - сделать это, используя только win32 apis. – Phyx

+0

Нет, дочерний процесс должен начинаться в той же консоли, пока вы не передаете странные флаги CreateProcess ... – Anders

+0

Отлично, я дам это сегодня утром и отметьте это как ответ, если он будет работать. Благодаря! – Phyx

Смежные вопросы