Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: OmarHack en 20 Junio 2013, 18:21 pm



Título: [Aporte] Cambiar el color de la consola de los programas C++.
Publicado por: OmarHack en 20 Junio 2013, 18:21 pm
Dar las gracias a Amchacon y a Daryo principalmente entro otros colaboradores del foro porque me ayudaron a hacer el código (por no decir que hicieron más que yo)  :xD

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <sstream>
  5. #include <vector>
  6. #include <map>
  7.  
  8. using namespace std;
  9.  
  10. void Colores();
  11.  
  12. string COLOR;
  13.  
  14. int salir = 0;
  15.  
  16. typedef void (*Puntero_A_Funcion)(void);
  17.  
  18.  
  19. void GuardarColores();
  20.  
  21.  
  22. int main (int argc, char* argv[])
  23. {
  24. //Si existe el archivo lo abre:        
  25.     ifstream logc;
  26. logc.open ( "PersonalizacionMasterShell.bat" );
  27. if ( logc.is_open() )
  28. {
  29. system("call PersonalizacionMasterShell.bat");
  30. }
  31. logc.close();
  32.  
  33. system ("cls");
  34.  
  35.    Inicio:
  36.  
  37.    void (*Funcion)(void); // Puntero a funcion sin argumentos
  38.    string Mensaje;
  39.    map<string,Puntero_A_Funcion> Comandos;
  40.    vector<string> texto;
  41.    string str;
  42.  
  43.  
  44.  
  45.  
  46.    Comandos["colores"] = Colores;
  47.    Comandos["guardarcolores"] = GuardarColores;
  48.  
  49.    getline(cin, str);
  50.    stringstream is(str);
  51.  
  52.    while(is >> str) texto.push_back(str);
  53.  
  54.    for (int i = 0; i < texto.size(); i++)
  55.    {
  56.        Funcion = Comandos[texto[i]]; // Obtengo el puntero a la funcion correspondiente
  57.  
  58.        if (Funcion) // Si existe la funcion
  59.              Funcion(); // llamar a la funcion
  60.        else
  61.             cout<<"Error, no existe el comando introducido: "<<texto[i]<<endl;
  62.    }
  63.    if (salir != 1)
  64. {goto Inicio;}  
  65.  
  66.    return 0;
  67. }
  68.  
  69.  
  70. //Declaración de funciones:
  71.  
  72.  
  73.  
  74. void Colores()
  75. {
  76.     short ColorElegido;
  77. cout << "Que color quieres?" <<endl;
  78. cin >> ColorElegido;
  79.  
  80. switch (ColorElegido)
  81. {
  82. case 1:
  83. system ("color 0f");
  84. COLOR = "0f";
  85. system ("cls");
  86. break;
  87.  
  88. case 2:
  89. system ("color f0");
  90. COLOR = "f0";
  91. system ("cls");
  92. break;
  93.  
  94. case 3:
  95. system ("color 0a");
  96. COLOR = "0a";
  97. system ("cls");
  98. break;
  99.  
  100. case 4:
  101. system ("color 9f");
  102. COLOR = "9f";
  103. system ("cls");
  104. break;
  105.  
  106. case 5:
  107. system ("color 0d");
  108. COLOR = "0d";
  109. system ("cls");
  110. break;
  111.  
  112. case 6:
  113. system ("color 0e");
  114. COLOR = "0e";
  115. system ("cls");
  116. break;
  117.  
  118. case 7:
  119. system ("color 2f");
  120. COLOR = "2f";
  121. system ("cls");
  122. break;
  123.  
  124. case 8:
  125. system ("color 8e");
  126. COLOR = "8e";
  127. system ("cls");
  128. break;
  129.  
  130. default:
  131. cout << "No has escrito una opcion valida,vuleve a escribir \"colores\""  <<
  132. " y selecciona un numero del 1 al 8" <<endl; break;    
  133. }    
  134. }
  135.  
  136.  
  137. void GuardarColores()
  138. {    
  139. //Borra los datos actuales del archivo:
  140.        fstream archivo;
  141. archivo.open("PersonalizacionMasterShell.bat", ios::out | ios::trunc);
  142. archivo.close();      
  143. //Edita el archivo:      
  144. ofstream archiv;
  145. archiv.open ( "PersonalizacionMasterShell.bat", ios::app);
  146. archiv << "color " <<COLOR;
  147. archiv.close();    
  148. }

Para que funcione tal cual solo es necesario crear una archivo de texto darle a guardar como... en el bloc de notas, y ponerle de nombre PersonalizacionMasterShell.bat este archivo debe estar guardado en el mismo sitio que el ejecutable del programa que hagáis.

Las instrucciones son:
1º Escribir la palabra entre comillas "colores" y pulsar enter.

2º Escribir un numero del 1 al 8 y pulsar enter, cada uno de esos 8 números tiene una configuración ya echa, pero podéis añadir nuevas configuraciones de colores con los números que os dejo al final, simplemente modificando la palabra "color" que se encuentra después de system y poniendo también el mismo número que pongáis después de "COLOR ="  (tenéis que poner los 2 números que queráis usar, cada número corresponde a un color como veréis al final).

3º Una vez que veáis como cambia el color de la consola y el texto simplemente escribís la palabra entre comillas "guardarcolores" y se guardará la configuración actual para que se active automáticamente cando iniciéis el programa. Esto sirve para que el usuario a falta de interfaz gráfica pueda personalizar un mínimo el entorno de la consola.

Sí más adelante le añado también la posibilidad de cambiar las fuentes al programa o algo similar lo pondré por aquí. 

Aquí la lista de colores:

El primero que pongáis corresponderá al fondo.
El segundo al color de la fuente.

0 = Negro
1 = Azul
2 = Verde
3 = Aguamarina
4 = Rojo
5 = Púrpura
6 = Amarillo
7 = Blanco
8 = Gris
9 = Azul claro
A = Verde claro
B = Aguamarina claro
C = Rojo claro
D = Púrpura claro
E = Amarillo claro
F = Blanco brillante

La consola tal cual está sería: 07, es decir, fondo negro letras blancas.

Creo que está súper explicado, de todas formas si no entendéis algo del código o no sabéis como hacer tal cosa preguntar.

PD: Por supuesto podéis cambiar el nombre de el PersonalizacionMasterShell.bat por el que vosotros queráis con tal de que coincidan el nombre que le pongáis en el código con el nombre real del archivo que debe encontrarse en la misma carpeta en la que compiléis y posteriormente donde tengáis el ejecutable.

Saludos.  :)