Jak přidat ikonu ke konzolové aplikaci (C#)

  1. Přidejte do Vaší konzolové aplikace reference na tyto 4 Assembly: PresentationCore, System.Drawing, System.Xaml a WindowsBase.
    Hledani assembly Presentation Core
    Takhle se přidává assembly PresentationCore, stačí stisknout OK!
  2. Do souboru(ů), kde budeme mít tyto třídy musíme mít tyto using directivy. Jedná se o ty co jsou v Program.cs po vytvoření konzolové aplikace a mnou přidané skrze Resolve:
    CSHARP
    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Media.Imaging;
  3. Vytvoříme si několik tříd. Jsou to výtažky z mých pomocných tříd, jsou tam ponechány pouze metody, které se v této ukázce používají:
    CSHARP
    class BitmapImageHelper
    {
        public static BitmapImage MsAppx(string relativePath)
        {
            BitmapImage bs = new BitmapImage(new Uri(ImageHelper.protocol + relativePath, UriKind.Absolute));
            return bs;
        }
    }
    class ImageHelper
    {
        public static string protocol = "pack://application:,,,";
        public static void SetAssemblyNameForWpfApps(string assemblyName)
        {
            protocol += "/" + assemblyName + ";component/";
        }
        public static void RegisterPackProtocol()
        {
            if (!UriParser.IsKnownScheme("pack"))
            new System.Windows.Application();
        }
    }
    class Pictures
    {
        public static Bitmap BitmapImage2Bitmap(BitmapImage bitmapImage)
        {
            using (MemoryStream outStream = new MemoryStream())
            {
                BitmapEncoder encoder = new BmpBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(bitmapImage));
                encoder.Save(outStream);
                System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(outStream);
                // return bitmap; <-- leads to problems, stream is closed/closing ...
                return new Bitmap(bitmap);
            }
        }
    }
    class NativeMethods
    {
        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern bool SetConsoleIcon(IntPtr hIcon);
    }
  4. Na konec napíšeme do Main() kód, který ikonku ke konzolové aplikaci přidá:
    CSHARP
    Console.Title = "Konzolova aplikace s logem MS";
    //-tempConsoleWithoutSwf je jmenem assembly volajiciho kodu(pokud zdejsi pomocne tridy budou v jinem sestaveni)!
    ImageHelper.SetAssemblyNameForWpfApps("tempConsoleWithoutSwf");
    ImageHelper.RegisterPackProtocol();
    BitmapImage bi = BitmapImageHelper.MsAppx("LogoMicrosoft.png");
    Bitmap logoBitmap = Pictures.BitmapImage2Bitmap(bi);
    NativeMethods.SetConsoleIcon(logoBitmap.GetHicon());
    Console.WriteLine("Program dokoncil svou cinnost, kliknutim na enter jej ukoncite.");
    Console.ReadLine();
  5. Nyní už jen zbývá do rootu projektu přidat obrázkový soubor LogoMicrosoft.png, ideálně ve čtvercové velikosti (zde bylo 50x50) a nastavit mu Build action z Content na Resource. Výsledek vypadá pak nějak takto:
    Konzolova aplikace s ikonkou

Napsat komentář