Rakkoc.Com Recep Akkoç / Rakkocun Yazıtları

31Oca/160

Windows Form Uygulamasında Konsol açma

Merhaba Arkadaşlar,

Windows uygulaması içinde konsol açmak için bir örneği paylaşmak istedim. Tabi birazda dökümante olsunda gerektiğinde buradan bakarım mantığında paylaşıyorum.

using System;  
using System.Windows.Forms;  
using System.Text;  
using System.IO;  
using System.Runtime.InteropServices;  
using Microsoft.Win32.SafeHandles;  
 
namespace WindowsApplication  
{  
    static class Program  
    {  
        [DllImport("kernel32.dll",  
            EntryPoint = "GetStdHandle",  
            SetLastError = true,  
            CharSet = CharSet.Auto,  
            CallingConvention = CallingConvention.StdCall)]  
        private static extern IntPtr GetStdHandle(int nStdHandle);  
        [DllImport("kernel32.dll",  
            EntryPoint = "AllocConsole",  
            SetLastError = true,  
            CharSet = CharSet.Auto,  
            CallingConvention = CallingConvention.StdCall)]  
        private static extern int AllocConsole();  
        private const int STD_OUTPUT_HANDLE = -11;  
        private const int MY_CODE_PAGE = 437;  
 
        static void Main(string[] args)  
        {  
            Console.WriteLine("This text you can see in debug output window.");  
              
            AllocConsole();  
            IntPtr stdHandle=GetStdHandle(STD_OUTPUT_HANDLE);  
            SafeFileHandle safeFileHandle = new SafeFileHandle(stdHandle, true);  
            FileStream fileStream = new FileStream(safeFileHandle, FileAccess.Write);  
            Encoding encoding = System.Text.Encoding.GetEncoding(MY_CODE_PAGE);  
            StreamWriter standardOutput = new StreamWriter(fileStream, encoding);  
            standardOutput.AutoFlush = true;  
            Console.SetOut(standardOutput);  
 
            Console.WriteLine("This text you can see in console window.");  
 
            MessageBox.Show("Now I'm happy!");  
        }  
    }  
} 

AllocConsole fonksionu tekbaşınada konsolu açıyor, Fakat daha önceden Console.Write gibi bir konsol işlemi yaptırdı iseniz yeni acılacak konsol ekranı sadece siyah ekrandan ibaret bir pencere olacaktır. Aktif uygulamayı handle (tutamaç) edip. bu handle'den bir stream (akış) oluşturup bu stream den bir stream writer (yazıcı akışkan) oluşturup mevcut thread'e basarsak yeni ekelenecek console metinleri direk siyah ekranımıza düşecektir.

iyi çalışmalar dilerim.

 

Windows form da bir örnek de yapayım; Aşağıdaki örnette Timer1 1 saniyede bir ekrana saat tarih basmakta. Button3'e basıldığında Console ekranı gelecek ve saat tarih ekrana yazılmaya başlayacaktır. Bütün işlem button3'un onclick fonksiyonun icindeki adımlar.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;
using Microsoft.Win32.SafeHandles;

namespace MifareHidEmilator
{
    public partial class frmMainForm : Form
    {

        [DllImport("kernel32.dll",
    EntryPoint = "GetStdHandle",
    SetLastError = true,
    CharSet = CharSet.Auto,
    CallingConvention = CallingConvention.StdCall)]
        private static extern IntPtr GetStdHandle(int nStdHandle);
        [DllImport("kernel32.dll",
            EntryPoint = "AllocConsole",
            SetLastError = true,
            CharSet = CharSet.Auto,
            CallingConvention = CallingConvention.StdCall)]
        private static extern int AllocConsole();
        private const int STD_OUTPUT_HANDLE = -11;
        private const int MY_CODE_PAGE = 437;  

        
        public frmMainForm()
        {
            InitializeComponent();
            //this.Hide();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            AllocConsole();

            IntPtr stdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
            SafeFileHandle safeFileHandle = new SafeFileHandle(stdHandle, true);
            FileStream fileStream = new FileStream(safeFileHandle, FileAccess.Write);
            Encoding encoding = System.Text.Encoding.GetEncoding(MY_CODE_PAGE);
            StreamWriter standardOutput = new StreamWriter(fileStream, encoding);
            standardOutput.AutoFlush = true;
            Console.SetOut(standardOutput);  
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Console.WriteLine(DateTime.Now);
        }

        private void frmMainForm_Load(object sender, EventArgs e)
        {

        }
    }
}
5Tem/120

Windows 8e geçmek nekadara maal olacak ?

Microsoft Windows 8 yükseltmeleri için sonunda fiyat verdi. Buna göre Windows XP ve üstüne ait tüm sürümlerden Windows 8’e geçmek 39.99 dolar olacak. Fiyatın makul bir seviyede tutulması hem çoğu kişinini yeni işletim sistemine geçmeyi tercih etmesini sağlayacak hemde korsan oranını düşürecektir... Fakat benim gibi Linux kullanan insanlarin Windows 8i ne kadar ödiyerek satin alacaklarına ait bir bildirimde bulunulmamış 🙂 bence suana kadar korsan kullanan insanlarida kazanmak adina herkese belli bir fiyat biçerek o fiyat uzerinden değerlendirmek daha doğru olacaktır.

Windows.com’da yükseltme satın almak için Windows 8 Yükseltme Asistanı sizlere yardımcı olacak ve adım adım kurulum için yardım edecek. Bunun yanında kurulum bittiğinde ücretsiz eklenti olarak isterseniz Windows Media Center kurma seçeneğine sahip olacaksınız. Ayrıca kurulum asistanı sizlere uyumsuz bir yazılım bulduğunda veya ayarları değiştirmeniz gerektiğine dair uyarı verecek. Tüm önşartlar hazırlandığından asistan Windows 8 kopyasını entegre indirme yazılımıyla sisteminize indirecek.

Windows 8’i dijital indirme yanında fiziksel olarak satın alma seçeneğiniz de tabii ki bulunuyor. Bu seçenekteyse yükseltme maliyeti DVD medyasıyla 69.99 dolara çıkıyor.

Açıklanan yükseltme fiyatlarının belirli bir promosyon süresi olduğunu ve son tarihin 31 Ocak 2013 olduğunu da belirtelim. Türkiye'deki, özel kampanyayla son aylarda aldığınız Windows 7 orijinal sürümünü Windows 8'e 29 lira karşılığında geçirebileceksiniz.