C# - Konzol alkalmazások extra beállítási lehetőségei

Konzol alkalmazások 1. rész

forráskód letöltése
Amikor egy konzol alkalmazást készítünk, akkor általában a Console osztályt használjuk fel különféle feladataink megvalósításához. Ez az osztály azonban nem biztosít számos olyan funkciót, melyet egy ilyen parancssori alkalmazásban ki lehet használni.
Sorozatunkban azokat a lehetőségeket kutatjuk, melyek használhatók parancssori alkalmazások fejlesztésekor, de a Console osztályban nincsenek benne.
Ilyen lehetőség például az ablakba írt szöveg és annak hátterének a színe, melyeket tetszés szerint megválaszthatunk programból.
Ezen extra lehetőségek eléréséhez a Kernel32.dll-ben lévő néhány e témában használható függvényének elérésére lesz szükségünk. Ilyen a GetStdHandle függvény, mellyel lekérdezhetjük a konzol ablak azonosítóját, amit felhasználva majd elérhetjük az extra szolgáltatásokat.
    [DllImport("kernel32.dll", EntryPoint="GetStdHandle", SetLastError=true, CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
    private static extern int GetStdHandle(int nStdHandle);
Másik függvény, melyre szükségünk lesz mostani példánknál a SetConsoleTextAttribute lesz. Ezt használjuk majd a konzol ablak aktuális színeinek beállítására.
    [DllImport("kernel32.dll", EntryPoint="SetConsoleTextAttribute", SetLastError=true, CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
    private static extern int SetConsoleTextAttribute(int hConsoleOutput, int wAttributes);
Készítünk egy Win32 osztályt, melyhez statikus függvényeket hozunk létre, hogy majd egyszerűen használhassuk a benne lévő függvényeket. A konstruktorban kérdezzük le a konzol ablak azonosítóját a GetStdHandle függvénnyel. Paraméterként a STD_OUTPUT_HANDLE konstanst adjuk meg, így a kimeneti standard ablak azonosítót kapjuk meg, mellyel az írás és az ehhez tartozó műveletek végezhetők el.
    static Win32()
    {
      hStdConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    }
A SetTextColor függvényünkkel tudjuk majd beállítani az aktuális írás és háttér színt. Itt azonban nem használhatunk RGB színeket, hanem csak 16 előre meghatározott szín közül választhatunk. Ezekhez létrehozunk két felsorolt típust, hogy egyszerűbb legyen a megadás.
A választott szín beállításához a SetConsoleTextAttribute függvényt kell meghívnunk, melyben első paraméterként a már lekérdezett ablak azonosítót adjuk át, míg másodikként a két szín érték összegét. Mivel négy bites színeket használunk, így a byte egyik négy bitjébe az írás, másik négy bitjébe a háttér színének kódja kerülhet.
    public static void SetTextColor(ColorForeground foreground, ColorBackground background)
    {
      SetConsoleTextAttribute(hStdConsoleOutput, (int)foreground + (int)background);
    }
Ezek után már egyszerű a felhasználás: a konzolra történő írás előtt a SetTextColor függvény hívással megadhatjuk, hogy milyen színű legyen a feliratunk, melyet már a Console osztály Writexxx függvényeivel írhatunk ki.
    static void Main(string[] args)
    {
      Win32.SetTextColor(Win32.ColorForeground.Yellow, Win32.ColorBackground.Maroon);
      Console.WriteLine("Software Online");
      Win32.SetTextColor(Win32.ColorForeground.Blue, Win32.ColorBackground.White);
      Console.WriteLine("http://www.SoftwareOnline.hu");
      Console.Read();
    }

Konzol alkalmazások cikksorozat