2008-09-16 11 views
12

У меня есть программа командной строки, которая выводит журнал на экран.Как изменить цвет текста в командной строке Windows

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

Я использую ruby, но я думаю, что это было бы одинаково на любом другом языке.

Что-то вроде:

red = "\0123" # character code 
white = "\0223" 

print "#{red} ERROR: IT BROKE #{white}" 
print "other stuff" 

ответ

6

Вы должны получить доступ к [Win32 Console API] (http://msdn.microsoft.com/en-us/library/ms682073(VS.85%29.aspx). К сожалению, я не знаю, как вы могли бы сделать, что из Руби. в Perl, я бы использовать Win32::Console модуль. консоль Windows, не реагирует на управляющие коды ANSI.

Согласно article on colorizing Ruby output что artur02 упоминалось, вам необходимо установить & нагрузку, win32console гем.

0

Насколько я знаю, что это не представляется возможным с помощью командной строки, это только один цвет ...

0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Console_Test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.ForegroundColor = ConsoleColor.DarkRed; 
      Console.WriteLine("Hello World"); 
      Console.ReadKey(); 
     } 
    } 
} 

Вы можете изменить цвет с помощью простая программа C#, http://powerof2games.com/node/31 описывает, как вы можете обернуть вывод консоли для достижения эффекта.

0

Вы хотите ANSI escape codes.

+2

Пропускные коды ANSI недоступны в командной строке Windows, изначально. – 2010-09-14 11:21:03

0

Много старых ANSI Color Codes работы. Код для красного переднего плана - это что-то вроде Escape- [31m. Escape - это символ 27, так что это «\ 033 [31m» или «\ x1B [31m», в зависимости от вашей схемы экранирования.

[39m - это код для возврата к цвету по умолчанию.

Также можно указать несколько кодов одновременно, чтобы одновременно задать цвет переднего и заднего фона.

Возможно, вам потребуется загрузить ANSI.sys, см. this page.

3

Вы можете прочитать здесь хорошую и проиллюстрированную статью: http://kpumuk.info/ruby-on-rails/colorizing-console-ruby-script-output/

Я думаю, настройка цвета текста консоли довольно конкретный язык. Вот пример в C# из MSDN:

for (int x = 0; x < colorNames.Length; x++) 
{ 
    Console.Write("{0,2}: ", x); 
    Console.BackgroundColor = ConsoleColor.Black; 
    Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), colorNames[x]); 
    Console.Write("This is foreground color {0}.", colorNames[x]); 
    Console.ResetColor(); 
    Console.WriteLine(); 
} 

Console.ForegroundColor является свойство для установки цвета текста.

0

Стандартная спецификация C/C++ для вывода в командную строку не определяет возможности изменения цвета окна консоли. Тем не менее, в Win32 есть много функций для выполнения такой задачи.

Самый простой способ изменить цвет консоли Win32 - через системную команду в iostream.h. Эта функция вызывает команду DOS. Чтобы изменить цвета, мы будем использовать его для вызова команды цвета. Например, system("Color F1"); сделает консольный темный свет на белом фоне.

DOS Цвет

Цвет, доступный для использования с командой являются шестнадцатью DOS цветов каждый из которых представлен с шестигранной цифрой. Первый - это фон, а второй - передний план.

0 = Black 8 = Gray 
1 = Blue  9 = Light Blue 
2 = Green A = Light Green 
3 = Aqua  B = Light Aqua 
4 = Red  C = Light Red 
5 = Purple D = Light Purple 
6 = Yellow E = Light Yellow 
7 = White F = Bright White 

Только это небольшое прикосновение к цвету делает консольные программы более визуально приятными. Однако команда Color изменит цвет всей консоли. Для управления отдельными ячейками нам нужно использовать функции из windows.h.

ли сделать, что вам нужно использовать функцию SetConsoleAttribute

http://msdn.microsoft.com/en-us/library/ms686047.aspx

0

В конечном итоге вам необходимо позвонить по телефону SetConsoleTextAttribute. Вы можете получить буфер буфера экрана консоли от GetStdHandle.

2

Вы можете использовать escape-последовательность ANSI, но это не будет делать то, что вы хотите в современных версиях Windows. В Википедии есть очень информативная статья:

http://en.wikipedia.org/wiki/ANSI_escape_code

Таким образом, ответ на ваш оригинальный вопрос почти наверняка «нет». Однако вы можете изменить цвет переднего плана, не записывая escape-последовательность, например, вызывая функцию API Win32. Я не знаю, как это сделать такого рода вещи в Рубине с верхней части моей головы, но кто-то, кажется, удалось:

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/241925

Я полагаю, вы хотите использовать 4 для темно-красного или 12 для ярко-красного и 7 для восстановления цвета по умолчанию.

Надеюсь, это поможет!

2

на ANSI эвакуационных кодов:

32-битный символ режима (подсистема: консоли) приложения Windows, не пишут ANSI управляющие последовательности для консоли

Они должны интерпретировать действия побег кода и вызовите родной консоли API вместо

Благодаря Microsoft :-(

2

color [background][foreground]

Где цвета определяются следующим образом:

0 = Black 8 = Gray 
1 = Blue  9 = Light Blue 
2 = Green A = Light Green 
3 = Aqua  B = Light Aqua 
4 = Red  C = Light Red 
5 = Purple D = Light Purple 
6 = Yellow E = Light Yellow 
7 = White F = Bright White 

Например, чтобы изменить цвет фона на синий и на переднем плане до серого, вы должны ввести:

color 18

+0

для использования в cygwin: alias color = 'cmd/c color' – zzapper 2014-01-28 12:07:19

0

Я был с помощью бесплатной программы windows tail, называемой baretail (google it), на протяжении веков, которая позволяет вам выполнить устаревшую версию команды unix tail. Он позволяет вам раскрашивать линии, зависящие от любых ключевых слов, которые вы определяете. Что приятно в качестве решения, оно не связано с конкретным языком или настройкой и т. Д., Вы просто определяете свою цветовую схему и ее как ослиный конг. В моем личном топ-10 бесплатных помощников!

24

На окнах, вы можете сделать это легко тремя способами:

require 'win32console' 
puts "\e[31mHello, World!\e[0m" 

Теперь вы можете расширить строку с небольшим методом, который называется red

require 'win32console' 
class String 
    def red 
    "\e[31m#{self}\e[0m" 
    end 
end 

puts "Hello, World!".red 

Также можно расширить строку, как это, чтобы получить больше цветов:

require 'win32console' 

class String 
    { :reset   => 0, 
    :bold   => 1, 
    :dark   => 2, 
    :underline  => 4, 
    :blink   => 5, 
    :negative  => 7, 
    :black   => 30, 
    :red   => 31, 
    :green   => 32, 
    :yellow   => 33, 
    :blue   => 34, 
    :magenta  => 35, 
    :cyan   => 36, 
    :white   => 37, 
    }.each do |key, value| 
    define_method key do 
     "\e[#{value}m" + self + "\e[0m" 
    end 
    end 
end 

puts "Hello, World!".red 

Или, если вы можете установить драгоценные камни:

gem install term-ansicolor 

И в вашей программе:

require 'win32console' 
require 'term/ansicolor' 

class String 
    include Term::ANSIColor 
end 

puts "Hello, World!".red 
puts "Hello, World!".blue 
puts "Annoy me!".blink.yellow.bold 

Пожалуйста, смотрите документацию на срок/ansicolor для получения дополнительной информации и возможного использования.

+1

Или вы можете использовать gem 'colorize'. * ПРИМЕЧАНИЕ * в окнах вам нужно вручную «требовать» win32console` при его использовании, поскольку «раскрасить» проверяет только `if RUBY_PLATFORM = ~/win32 /`, а в некоторых случаях `RUBY_PLATFORM` возвращает` i386-mingw32`. – 2012-09-14 23:47:59

2

Я создал небольшую кросс-платформенную жемчужину, которая обрабатывает эту бесшовную работу в Windows или POSIX-системах под MRI и JRuby.

Он не имеет зависимостей и использует коды ANSI для POSIX-систем, а также FFI (JRuby) или Fiddler (MRI) для Windows.

Чтобы использовать его, просто:

gem install color-console 

ColorConsole предоставляет методы для вывода строк текста в различных цветах, используя функцию Console.Write и Console.puts.

require 'color-console' 

Console.puts "Some text"     # Outputs text using the current console colours 
Console.puts "Some other text", :red  # Outputs red text with the current background 
Console.puts "Yet more text", nil, :blue # Outputs text using the current foreground and a blue background 

# The following lines output BlueRedGreen on a single line, each word in the appropriate color 
Console.write "Blue ", :blue 
Console.write "Red ", :red 
Console.write "Green", :green 

Посетите домашнюю страницу проекта на https://github.com/agardiner/color-console для более подробной информации.

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