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

728x90
반응형

TestProject.zip
0.01MB

▶ POINT.cs

using System.Runtime.InteropServices;

namespace TestProject
{
    /// <summary>
    /// 포인트
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    public struct POINT
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region Field

        /// <summary>
        /// X
        /// </summary>
        public int X;

        /// <summary>
        /// Y
        /// </summary>
        public int Y;

        #endregion
    }
}

 

728x90

 

▶ RECTANGLE.cs

using System.Runtime.InteropServices;

namespace TestProject
{
    ///
    /// 사각형
    /// 
    [StructLayout(LayoutKind.Sequential)]
    public struct POINT
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region Field

        ///
        /// X
        /// 
        public int X;

        ///
        /// Y
        /// 
        public int Y;

        #endregion
    }
}

 

300x250

 

▶ MONITOR_INFO_EX.cs

using System.Runtime.InteropServices;

namespace TestProject
{
    ///
    /// 모니터 정보 확장
    /// 
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 4)]
    public struct MONITOR_INFO_EX
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region Field

        ///
        /// 크기
        /// 
        public uint Size;

        ///
        /// 디스플레이 사각형
        /// 
        public RECTANGLE DisplayRectangle;

        ///
        /// 작업 영역 사각형
        /// 
        public RECTANGLE WorkingAreaRectangle;

        ///
        /// 플래그
        /// 
        public uint Flag;

        ///
        /// 장치명
        /// 
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
        public char[] DeviceName;

        #endregion
    }
}

 

▶ MonitorHelper.cs

using System;
using System.Runtime.InteropServices;

namespace TestProject
{
    ///
    /// 모니터 헬퍼
    /// 
    public static class MonitorHelper
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Import
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region 포인트에서 모니터 구하기 - MonitorFromPoint(point, flag)

        ///
        /// 포인트에서 모니터 구하기
        /// 
        ///포인트
        ///플래그
        /// 모니터 핸들
        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        private static extern IntPtr MonitorFromPoint(POINT point, uint flag);

        #endregion
        #region 모니터 정보 구하기 - GetMonitorInfo(monitorHandle, monitorInfo)

        ///
        /// 모니터 정보 구하기
        /// 
        ///모니터 핸들
        ///모니터 정보
        /// 처리 결과
        [DllImport("user32", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern bool GetMonitorInfo(IntPtr monitorHandle, ref MONITOR_INFO_EX monitorInfo);

        #endregion

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

        #region 모니터 정보 구하기 - GetMonitorInformation(monitorHandle)

        ///
        /// 모니터 정보 구하기
        /// 
        ///모니터 핸들
        /// 모니터 정보
        public static MONITOR_INFO_EX GetMonitorInformation(IntPtr monitorHandle)
        {
            MONITOR_INFO_EX monitorInfo = new MONITOR_INFO_EX
            {
                Size = (uint)Marshal.SizeOf(typeof(MONITOR_INFO_EX))
            };

            GetMonitorInfo(monitorHandle, ref monitorInfo);

            return monitorInfo;
        }

        #endregion
        #region 모니터 정보 구하기 - GetMonitorInformation(point)

        ///
        /// 모니터 정보 구하기
        /// 
        ///포인터
        /// 모니터 정보
        public static MONITOR_INFO_EX GetMonitorInformation(POINT point)
        {
            IntPtr monitorHandle = MonitorFromPoint(point, 0);

            MONITOR_INFO_EX monitorInfo = GetMonitorInformation(monitorHandle);

            return monitorInfo;
        }

        #endregion
    }
}

 

▶ Program.cs

using System;

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

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

        ///
        /// 프로그램 시작하기
        /// 
        private static void Main()
        {
            MONITOR_INFO_EX monitorInfo = MonitorHelper.GetMonitorInformation(new POINT { X = 0, Y = 0 });

            Console.WriteLine(monitorInfo.DeviceName);
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요