■ 연결된 모니터 수를 구하는 방법을 보여준다.
▶ ScreenHelper.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
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 } } |
▶ Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
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 } } |