Подтвердить что ты не робот

Как изменить цвет текста в командной строке Windows

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

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

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

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

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

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

Ответ 1

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

Согласно статье о раскраске вывода Ruby, о которой упоминалось в artur02, вам необходимо установить и загрузить драгоценный камень win32console.

Ответ 2

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

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

Теперь вы можете расширить String небольшим методом под названием red

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

 puts "Hello, World!".red

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

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

Дополнительную информацию и возможное использование см. в документах для term/ansicolor.

Ответ 3

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

Я думаю, что настройка цвета текста консоли очень специфична для языка. Вот пример из С# из 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 - это свойство для установки цвета текста.

Ответ 4

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

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

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

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

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

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

Ответ 5

в escape-кодах ANSI:

32-разрядный характерный режим (подсистема: консоль) Приложения Windows не записывают escape-последовательности ANSI в консоль

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

Спасибо microsoft: - (

Ответ 6

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

Ответ 7

Я создал небольшой кросс-платформенный камень, который отлично справляется с работой в 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.

Ответ 8

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

Ответ 9

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();
        }
    }
}

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

Ответ 11

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

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

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

Возможно, вам придется загрузить ANSI.sys, см. эту страницу.

Ответ 12

Стандартная спецификация 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

Ответ 13

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

Ответ 14

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