첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170

TestProject.zip
0.00MB

▶ ScreenHelper.cs

using System;
using System.Runtime.InteropServices;

namespace TestProject
{
    public static class ScreenHelper
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Structure
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region 사각형 - RECTANGLE

        /// <summary>
        /// 사각형
        /// </summary>
        [StructLayout(LayoutKind.Sequential)]
        private struct RECTANGLE
        {
            //////////////////////////////////////////////////////////////////////////////////////////////////// Field
            ////////////////////////////////////////////////////////////////////////////////////////// Public

            #region Field

            /// <summary>
            /// 왼쪽
            /// </summary>
            public int Left;

            /// <summary>
            /// 위쪽
            /// </summary>
            public int Top;

            /// <summary>
            /// 오른쪽
            /// </summary>
            public int Right;

            /// <summary>
            /// 아래쪽
            /// </summary>
            public int Bottom;

            #endregion
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Delegate
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region 모니터 열거 프로시저 - MonitorEnumProc(desktopHandle, deviceContextHandle, rectangle, data)

        /// <summary>
        /// 모니터 열거 프로시저
        /// </summary>
        /// <param name="desktopHandle">데스크톱 핸들</param>
        /// <param name="deviceContextHandle">디바이스 컨텍스트 핸들</param>
        /// <param name="rectangle">사각형</param>
        /// <param name="data">데이터</param>
        private delegate void MonitorEnumProc
        (
            IntPtr        desktopHandle,
            IntPtr        deviceContextHandle,
            ref RECTANGLE rectangle,
            int           data
        );

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Import
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region 디스플레이 모니터 열거하기 - EnumDisplayMonitors(deviceContextHandle, rectangleHandle, callback, data)

        /// <summary>
        /// 디스플레이 모니터 열거하기
        /// </summary>
        /// <param name="deviceContextHandle">디바이스 컨텍스트 핸들</param>
        /// <param name="rectangleHandle">사각형 핸들</param>
        /// <param name="callback">콜백</param>
        /// <param name="data">데이터</param>
        /// <returns>처리 결과</returns>
        [DllImport("user32.dll")]
        private static extern bool EnumDisplayMonitors
        (
            IntPtr          deviceContextHandle,
            IntPtr          rectangleHandle,
            MonitorEnumProc callback,
            int             data
        );

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Public

        #region 모니터 카운트 구하기 - GetMonitorCount()

        /// <summary>
        /// 모니터 카운트 구하기
        /// </summary>
        /// <returns>모니터 카운트</returns>
        public static int GetMonitorCount()
        {
            int monitorCount = 0;

            MonitorEnumProc callback = (IntPtr desktopHandle, IntPtr deviceContextHandle, ref RECTANGLE rectangle, int data) => ++monitorCount;

            if(EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, callback, 0))
            {
                return monitorCount;
            }
            else
            {
                return -1;
            }
        }

        #endregion
    }
}

 

728x90

 

▶ Program.cs

using System;

namespace TestProject
{
    /// <summary>
    /// 프로그램
    /// </summary>
    class Program
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region 프로그램 시작하기 - Main()

        /// <summary>
        /// 프로그램 시작하기
        /// </summary>
        private static void Main()
        {
            int monitorCount = ScreenHelper.GetMonitorCount();

            Console.WriteLine($"모니터 수 : {monitorCount}");
        }

        #endregion
    }
}
728x90
반응형
그리드형
Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요