첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ 콘솔 사용하기

------------------------------------------------------------------------------------------------------------------------


TestProject.zip



MainForm.cs

 

 

using Microsoft.Win32.SafeHandles;

using System;

using System.IO;

using System.Runtime.InteropServices;

using System.Windows.Forms;

 

namespace TestProject

{

    /// <summary>

    /// 메인 폼

    /// </summary>

    public partial class MainForm : Form

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Import

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region 콘솔 할당하기 - AllocConsole()

 

        /// <summary>

        /// 콘솔 할당하기

        /// </summary>

        /// <returns></returns>

        [DllImport("kernel32.dll")]

        private static extern bool AllocConsole();

 

        #endregion

        #region 콘솔 연결하기 - AttachConsole(processID)

 

        /// <summary>

        /// 콘솔 연결하기

        /// </summary>

        /// <param name="processID">프로세스 ID</param>

        /// <returns>처리 결과</returns>

        [DllImport("kernel32.dll")]

        private static extern bool AttachConsole(int processID);

 

        #endregion

        #region 표준 핸들 구하기 - GetStdHandle(standardDevice)

 

        /// <summary>

        /// 표준 핸들 구하기

        /// </summary>

        /// <param name="standardDevice">표준 장치</param>

        /// <returns>표준 핸들</returns>

        /// <remarks>

        /// standardDevice

        /// STD_INPUT_HANDLE  : (DWORD)-10

        /// STD_OUTPUT_HANDLE : (DWORD)-11

        /// STD_ERROR_HANDLE  : (DWORD)-12

        /// </remarks>

        [DllImport("kernel32.dll", SetLastError = true)]

        private static extern IntPtr GetStdHandle(int standardDevice);

 

        #endregion

        #region 콘솔 창 숨기기 - FreeConsole()

        

        /// <summary>

        /// 콘솔 창 숨기기

        /// </summary>

        /// <returns>처리 결과</returns>

        [DllImport("kernel32.dll", SetLastError = true)]

        [return: MarshalAs(UnmanagedType.Bool)]

        private static extern bool FreeConsole();

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - MainForm()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainForm()

        {

            InitializeComponent();

 

            this.showButton.Click += showButton_Click;

            this.hideButton.Click += hidebutton_Click;

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Private

        //////////////////////////////////////////////////////////////////////////////// Event

 

        #region 콘솔 표시하기 - showButton_Click(sender, e)

 

        /// <summary>

        /// 콘솔 표시하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void showButton_Click(object sender, EventArgs e)

        {

            RunConsole();

        }

 

        #endregion

        #region 콘솔 숨기기 - hidebutton_Click(sender, e)

 

        /// <summary>

        /// 콘솔 숨기기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void hidebutton_Click(object sender, EventArgs e)

        {

            FreeConsole();

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////// Function

 

        #region 콘솔 실행하기 - RunConsole()

 

        /// <summary>

        /// 콘솔 실행하기

        /// </summary>

        /// <returns>처리 결과</returns>

        private bool RunConsole()

        {

            if(!AttachConsole(-1))

            {

                AllocConsole();

            }

 

            IntPtr consoleHandle = GetStdHandle(-11);

 

            SafeFileHandle safeFileHandle = new SafeFileHandle(consoleHandle, true);

 

            FileStream stream = new FileStream(safeFileHandle, FileAccess.Write);

 

            using(StreamWriter writer = new StreamWriter(stream))

            {

                writer.WriteLine("Hello Console!");

            }

 

            return true;

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요