Introduction
When working with console applications in C#, always a black screen with white foreground comes. We can change the foreground color as well as background color of our console application by using Win32 API SetConsoleTextAttribute
.
SetConsoleTextAttribute
takes two arguments:
- Handle to console screen buffer.
- Character attributes.
BOOL SetConsoleTextAttribute( HANDLE hConsoleOutput, WORD wAttributes );
We can get handle to console screen buffer by using another function of Win32 API, i.e., GetStdHandle()
, which takes a parameter and returns handle for input, output or error device. We give -10 for input, -11 for output and -12 for error device as parameter to GetStdHandle
function. We have attributes for foreground and background colors like 0x0001 for foreground blue and 0x0010 for background blue.
How to Use Win32 API Function in C#
First of all, declare the function using DllImport
attribute. An API function must be declared static extern
.
Let�s start an example:
using System;
using System.Runtime.InteropServices;
namespace color_console
{
class Class1
{
static void Main(string[] args)
{
Class1 c =new Class1();
c.change();
}
[DllImport("kernel32.dll", SetLastError=true)]
public static extern bool SetConsoleTextAttribute(
IntPtr hConsoleOutput,
CharacterAttributes wAttributes);
[DllImport("kernel32.dll")]
public static extern IntPtr GetStdHandle(int nStdHandle);
void change()
{
IntPtr hOut;
hOut= GetStdHandle(-11);
SetConsoleTextAttribute(hOut, CharacterAttributes.FOREGROUND_BLUE );
Console.WriteLine(" Subhan ALLAH ");
SetConsoleTextAttribute(hOut, CharacterAttributes.BACKGROUND_RED);
Console.WriteLine(" Alkhamdolillah ");
SetConsoleTextAttribute(hOut, CharacterAttributes.BACKGROUND_GREEN );
Console.WriteLine(" Allah O Akbar ");
SetConsoleTextAttribute(hOut, CharacterAttributes.FOREGROUND_RED );
Console.WriteLine(" Pakistan ");
}
public enum CharacterAttributes
{
FOREGROUND_BLUE = 0x0001,
FOREGROUND_GREEN = 0x0002,
FOREGROUND_RED = 0x0004,
FOREGROUND_INTENSITY = 0x0008,
BACKGROUND_BLUE = 0x0010,
BACKGROUND_GREEN = 0x0020,
BACKGROUND_RED = 0x0040,
BACKGROUND_INTENSITY = 0x0080,
COMMON_LVB_LEADING_BYTE = 0x0100,
COMMON_LVB_TRAILING_BYTE = 0x0200,
COMMON_LVB_GRID_HORIZONTAL = 0x0400,
COMMON_LVB_GRID_LVERTICAL = 0x0800,
COMMON_LVB_GRID_RVERTICAL = 0x1000,
COMMON_LVB_REVERSE_VIDEO = 0x4000,
COMMON_LVB_UNDERSCORE = 0x8000
}
}
}
Change the Title of Console:
Changing the title of Console is also much easier, just use SetConsoleTitle()
function and provide a string
to it as parameter, that would be title of console. You can do it easily:
[DllImport("kernel32.dll")
public static extern bool SetConsoleTitle(String lpConsoleTitle);
First, declare SetConsoleTitle
function and then use it:
SetConsoleTitle(" ALlah O Akbar ... ");
So, you have seen how easily we can use Win32 APIs in C# and can do a lot of things that are not provided by .NET Framework. We can also change the font and cursor of console applications using Win32 APIs.