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 / Exemple :
//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
12 juin 2006 à 09:28
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.DarkGreen;
Console.WriteLine("Test");
1 janv. 2004 à 23:53
peace
sebeuh
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.