¿Cómo puedo cambiar el color del texto en el símbolo del sistema de Windows?

votos
12

Tengo un programa de línea de comando, que da salida al registro en la pantalla.

Quiero que las líneas de error aparezcan en rojo. ¿Hay algún código especial de caracteres que pueda mostrar para cambiar el color del texto a rojo y luego volver a ponerlo en blanco?

Estoy usando ruby, pero me imagino que esto sería igual en cualquier otro idioma.

Algo como:

red = \0123 # character code
white = \0223

print #{red} ERROR: IT BROKE #{white}
print other stuff
Publicado el 16/09/2008 a las 23:06
fuente por usuario
En otros idiomas...                            


14 respuestas

votos
0

Por lo que yo sé, no es posible con una línea de comando, es solo un color ...

Respondida el 16/09/2008 a las 23:11
fuente por usuario

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

Puede cambiar el color con un simple programa C #, http://powerof2games.com/node/31 describe cómo puede envolver la salida de la consola para lograr el efecto.

Respondida el 16/09/2008 a las 23:12
fuente por usuario

votos
0

Quieres códigos de escape ANSI .

Respondida el 16/09/2008 a las 23:12
fuente por usuario

votos
0

Muchos de los antiguos códigos de color de ANSI funcionan. El código para un primer plano rojo es algo así como Escape- [31m. Escape es el carácter 27, por lo que es "\ 033 [31m" o "\ x1B [31m", dependiendo de su esquema de escape.

[39m es el código para volver al color predeterminado.

También es posible especificar múltiples códigos a la vez para establecer el color de fondo y de fondo simultáneamente.

Puede que tenga que cargar ANSI.sys, vea esta página .

Respondida el 16/09/2008 a las 23:14
fuente por usuario

votos
3

Puede leer aquí un artículo bueno e ilustrado: http://kpumuk.info/ruby-on-rails/colorizing-console-ruby-script-output/

Creo que configurar el color del texto de la consola es bastante específico del idioma. Aquí hay un ejemplo en C # de 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 es la propiedad para establecer el color del texto.

Respondida el 16/09/2008 a las 23:17
fuente por usuario

votos
0

La especificación C / C ++ estándar para la salida a la línea de comando no especifica ninguna capacidad para cambiar el color de la ventana de la consola. Dicho esto, hay muchas funciones en Win32 para hacer tal cosa.

La forma más fácil de cambiar el color de la consola Win32 es mediante el comando del sistema en iostream.h. Esta función invoca un comando de DOS. Para cambiar los colores, lo usaremos para invocar el comando de color. Por ejemplo, system("Color F1");hará que la consola sea azul oscuro en blanco.

Colores de DOS

Los colores disponibles para usar con el comando son los dieciséis colores de DOS, cada uno representado con un dígito hexadecimal. El primero es el fondo y el segundo es el primer plano.

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

Solo este pequeño toque de color hace que los programas de la consola sean más agradables visualmente. Sin embargo, el comando Color cambiará el color de toda la consola. Para controlar celdas individuales, necesitamos usar funciones de windows.h.

Haz lo que necesites para usar la SetConsoleAttributefunción

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

Respondida el 16/09/2008 a las 23:18
fuente por usuario

votos
6

Necesita acceder a [Win32 Console API] ( http://msdn.microsoft.com/en-us/library/ms682073(VS.85%29.aspx) . Desafortunadamente, no sé cómo lo haría eso de Ruby. En Perl, usaría el módulo Win32 :: Console . La consola de Windows no responde a los códigos de escape de ANSI.

De acuerdo con el artículo sobre la coloración de la salida de Ruby que mencionó artur02, necesitas instalar y cargar la gema win32console.

Respondida el 16/09/2008 a las 23:21
fuente por usuario

votos
0

En última instancia, debe llamar a SetConsoleTextAttribute . Puede obtener un identificador de búfer de pantalla de consola desde GetStdHandle .

Respondida el 16/09/2008 a las 23:24
fuente por usuario

votos
2

Puede usar una secuencia de escape ANSI, pero eso no hará lo que quiera en las versiones modernas de Windows. Wikipedia tiene un artículo muy informativo:

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

Entonces la respuesta a su pregunta original es casi seguro que "no". Sin embargo, puede cambiar el color de primer plano sin escribir una secuencia de escape, por ejemplo, invocando una función API de Win32. No sé cómo hacer este tipo de cosas en Ruby fuera de mi cabeza, pero alguien más parece haber logrado:

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

Me imagino que querrías usar 4 para rojo oscuro o 12 para rojo brillante, y 7 para restaurar el color predeterminado.

¡Espero que esto ayude!

Respondida el 16/09/2008 a las 23:29
fuente por usuario

votos
2

en códigos de escape ANSI:

Modo de caracteres de 32 bits (subsistema: consola) Las aplicaciones de Windows no escriben secuencias de escape ANSI en la consola

Deben interpretar las acciones del código de escape y llamar a la API de consola nativa en su lugar

Gracias microsoft :-(

Respondida el 16/09/2008 a las 23:33
fuente por usuario

votos
2

color [background][foreground]

Donde los colores se definen de la siguiente manera:

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

Por ejemplo, para cambiar el fondo a azul y el primer plano a gris, debe escribir:

color 18

Respondida el 16/09/2008 a las 23:35
fuente por usuario

votos
0

He estado usando un programa freeware windows tail llamado baretail (google it) para las edades que te permite hacer una versión de Windows-Appified del comando tail de Unix. Le permite colorear líneas dependiendo de las palabras clave que defina. Lo bueno de esta solución es que no está ligada a un idioma o configuración específica, etc., simplemente defines tu combinación de colores y está en modo de burro como kong. ¡En mis 10 mejores freeware helpers!

Respondida el 17/09/2008 a las 01:20
fuente por usuario

votos
24

En Windows, puede hacerlo fácilmente de tres maneras:

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

Ahora puedes extender String con un pequeño método llamado red

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

 puts "Hello, World!".red

También puedes extender String así para obtener más colores:

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

O bien, si puedes instalar gemas:

gem install term-ansicolor

Y en tu programa:

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

Consulte los documentos para term / ansicolor para obtener más información y uso posible.

Respondida el 17/09/2008 a las 01:49
fuente por usuario

votos
2

He sido autor una pequeña joya multiplataforma que se encarga de esta perfección se ejecuta en Windows o POSIX-sistemas, tanto en virtud de resonancia magnética y JRuby.

No tiene dependencias, y utiliza los códigos ANSI en sistemas POSIX, y, o bien FFI (JRuby) o violinista (IRM) para Windows.

Para usarlo, simplemente:

gem install color-console

ColorConsole proporciona métodos para la salida de las líneas de texto en diferentes colores, utilizando las funciones Console.Write y 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

Visita la página de inicio del proyecto en https://github.com/agardiner/color-console para más detalles.

Respondida el 31/07/2015 a las 09:42
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more