C# Windows Form Application da Console Ekranını Açmak

Console

C# ile Windows Form uygulamalarında Console ekranını nasıl açabiliriz bu yazımızda onu öğreneceğiz.


Zaman zaman uygulama geliştirirken çift modlu uygulamalar da geliştirmemiz gerekiyor ve hemen düşünmeye başlıyoruz nasıl olabilir diye. Bu yazımızda iki modu da tek bir uygulamada nasıl kullanabileceğimizi gösteriyor.
İlk Olarak bir windows form application başlatıyoruz ve Program.cs dosyamızı açıyoruz.

C# Args
Program.cs yukarıdakine benzer bir şekilde olacaktır.

Kodlarımızı şu şekilde düzenledikten sonra argüman olarak console verip uygulamamızı f5 ile derliyoruz.
Argüman hakkında daha fazla bilgi için tıklayın.

    static class Program
    {
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool AllocConsole();
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool FreeConsole();
        [DllImport("kernel32", SetLastError = true)]
        static extern bool AttachConsole(int dwProcessId);
        [DllImport("user32.dll")]
        static extern IntPtr GetForegroundWindow();
        [DllImport("user32.dll", SetLastError = true)]
        static extern uint GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);

        ///
/// The main entry point for the application.
        ///
        [STAThread]
        static void Main(string[] args)
        {
            string mode = args.Length > 0 ? args[0] : "gui";//Argüman boş ise mode gui yapılıyor.

            if (mode == "gui")
            {
                MessageBox.Show("Program GUI modunda çalışacak");
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
            else if (mode == "console")
            {
                IntPtr ptr = GetForegroundWindow();
                int u;
                GetWindowThreadProcessId(ptr, out u);
                Process process = Process.GetProcessById(u);

                if (process.ProcessName == "cmd")    //console modunda uygulama cmd ekranında mı çalıştırıldı?
                {
                    AttachConsole(process.Id);

                    //cmd'den çalışıyor
                    Console.WriteLine("CMD Modu");
                    //Diğer Kodlar
                }
                else
                {
                    //Yeni console oluşturuluyor...
                    AllocConsole();

                    Console.WriteLine("Normal CONSOLE modu açıldı");
                    Console.WriteLine("Devam etmek için bir tuşa basın ...");
                    Console.ReadLine();
                    //Diğer Kodlar
                }
                FreeConsole();
            }
        }
    }

Örnek Uygulama ve Kaynak Dosyaları