begin process at 2008 05 16 20:56:23
1 173 724 membres
533 nouveaux aujourd'hui
13 972 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ECRIRE EN COULEUR SUR LA CONSOLE


Information sur la source

Catégorie :API Source .NET ( DotNet ) Classé sous : console, couleur Niveau : Initié Date de création : 31/12/2003 Vu / téléchargé: 10 621 / 263

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

En réponse à un message, voici une façon simple d'égayer (décorer) les programmes console. Assembly Helper et code de test.
Comme il n'existe rien en DOTNET pour ce faire, on va recourir aux APIs natives (Win32) et utiliser la technologie P/Invoke

1) Il faut déjà récupérer un handle sur la console
Il n'existe rien en DOTNET pour ce faire, on va recourir aux APIs natives (Win32)
HANDLE GetStdHandle(  DWORD nStdHandle );

convertie en C# avec utilisation de la technologie P/Invoke (Interop)
[DllImportAttribute("Kernel32.dll")]
private static extern int GetStdHandle( int nStdHandle );

2) Il faut ensuite appliquer les attributs désirés
BOOL SetConsoleTextAttribute(
  HANDLE hConsoleOutput,
  WORD wAttributes
);

convertie en C#
[DllImportAttribute("Kernel32.dll")]
private static extern bool SetConsoleTextAttribute
(int hConsoleOutput, int wAttributes );

3) Voici donc un exemple simpliste :
const int STD_OUTPUT_HANDLE = -11;
int couleur = 6; //jaune
Console.Write("Un programme console en ");
SetConsoleTextAttribute(console, couleur);
Console.Write("... Couleur ");
SetConsoleTextAttribute(console, couleur+8);
Console.WriteLine("... brillante");

4) Il faudrait encapsuler les couleurs (fond et texte), ainsi que la fonctionnalité
de récupération des attributs de la console "GetConsoleScreenBufferInfo" dans une classe
par exemple : ConsoleCouleurHelper

Voici le début de la conception de cette classe

Importation des structures et des fonctions API dans la classe
Définition d'énumérations pour les couleurs (fond et texte)

Récupération des informations de la console dans le Ctor
Fonction de restauration des attributs d'origine
Fonction de modification des couleurs

Packaging en librairie ConsoleCouleur.DLL

Source

  • //voici le code de l'exemple minimal
  • using System;
  • using System.Runtime.InteropServices;//pour DllImport
  • class TestCouleur
  • {
  • const int STD_OUTPUT_HANDLE = -11;
  • //les imports pour récupérer le handle de la console et modifier les attributs d'écriture
  • [DllImportAttribute("Kernel32.dll")]
  • private static extern int GetStdHandle( int nStdHandle );
  • [DllImportAttribute("Kernel32.dll")]
  • private static extern int SetConsoleTextAttribute
  • (int hConsoleOutput, int wAttributes );
  • [STAThread]
  • static void Main(string[] args)
  • {
  • int console = GetStdHandle(STD_OUTPUT_HANDLE);
  • int couleur = 5; //bleu
  • int couleurFond = 0x0080 /*brillant*/+0x0060/*Jaune*/;
  • Console.Write("Un programme console en ");
  • SetConsoleTextAttribute(console, couleur);
  • Console.Write("... Couleur ");
  • SetConsoleTextAttribute(console, couleur+8/*brillant*/);
  • Console.Write("... brillante");
  • SetConsoleTextAttribute(console, couleur+couleurFond);
  • Console.WriteLine("... avec fond");
  • SetConsoleTextAttribute(console, 7 /*blanc*/);
  • }
  • }
//voici le code de l'exemple minimal

using System;
using System.Runtime.InteropServices;//pour DllImport


class TestCouleur
{
	const int STD_OUTPUT_HANDLE = -11;
	//les imports pour récupérer le handle de la console et modifier les attributs d'écriture
	[DllImportAttribute("Kernel32.dll")]
	private static extern int GetStdHandle( int nStdHandle );

	[DllImportAttribute("Kernel32.dll")]
	private static extern int SetConsoleTextAttribute
		(int hConsoleOutput, int wAttributes );

	[STAThread]
	static void Main(string[] args)
	{
		int console = GetStdHandle(STD_OUTPUT_HANDLE);
		int couleur = 5; //bleu 
		int couleurFond = 0x0080 /*brillant*/+0x0060/*Jaune*/;
		Console.Write("Un programme console en ");
		SetConsoleTextAttribute(console, couleur);
		Console.Write("... Couleur ");
		SetConsoleTextAttribute(console, couleur+8/*brillant*/);
		Console.Write("... brillante");
		SetConsoleTextAttribute(console, couleur+couleurFond);
		Console.WriteLine("... avec fond");
		SetConsoleTextAttribute(console, 7 /*blanc*/);
	}
}

Conclusion

la solution contient 4 projets

TestSimple : autonome et minimal
TestCouleur1 : autonome
ConsoleCouleur : la librairie utilisée par le suivant
TestCouleur2 : test utilisant la librairie précédente
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de seboss le 01/01/2004 23:53:20

    dans le prochain framework 1.2 c'est incorporé dans la classe system;
    peace
    sebeuh

  • signaler à un administrateur
    Commentaire de Bidou le 12/06/2006 09:28:07 administrateur CS

    Dans le framework 2.0, c'est intégrer dans la Class Console :
              
         Console.BackgroundColor =  ConsoleColor.Black;
         Console.ForegroundColor = ConsoleColor.DarkGreen;
         Console.WriteLine("Test");

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS