public static void Initialize() { m_staticRECT = new WinApi.RECT(0, 0, 0, 0); List <WinApi.MONITORINFO> listMONITORINFO = new List <WinApi.MONITORINFO>(); WinApi.MonitorEnumDelegate callback = (IntPtr hDesktop, IntPtr hdc, ref WinApi.RECT pRect, int d) => { var varInfo = new WinApi.MONITORINFO(); varInfo.cbSize = sizeof(int) * 4 * 2 + sizeof(int) * 2; if (WinApi.GetMonitorInfo(hDesktop, ref varInfo) == false) { return(false); } var varMONITORINFO = varInfo.rcMonitor; if (varMONITORINFO.Left < m_staticRECT.Left) { m_staticRECT.Left = varMONITORINFO.Left; } if (varMONITORINFO.Top < m_staticRECT.Top) { m_staticRECT.Top = varMONITORINFO.Top; } if (varMONITORINFO.Right > m_staticRECT.Right) { varMONITORINFO.Right = m_staticRECT.Right; } if (varMONITORINFO.Bottom > m_staticRECT.Bottom) { varMONITORINFO.Bottom = m_staticRECT.Bottom; } listMONITORINFO.Add(varInfo); return(true); }; if (WinApi.EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, callback, 0)) { g_staticMONITORINFO = listMONITORINFO.ToArray(); } else { g_staticMONITORINFO = new[] { new WinApi.MONITORINFO() { rcMonitor = Screen.PrimaryScreen.Bounds, rcWork = Screen.PrimaryScreen.WorkingArea, } }; } }
//################################################################################################################# public static void Initialize() { s_combinedRect = new WinApi.RECT(0, 0, 0, 0); List <WinApi.MONITORINFO> screens = new List <WinApi.MONITORINFO>(); WinApi.MonitorEnumDelegate callback = (IntPtr hDesktop, IntPtr hdc, ref WinApi.RECT pRect, int d) => { var info = new WinApi.MONITORINFO(); info.cbSize = sizeof(int) * 4 * 2 + sizeof(int) * 2; if (WinApi.GetMonitorInfo(hDesktop, ref info) == false) { return(false); } var rect = info.rcMonitor; if (rect.Left < s_combinedRect.Left) { s_combinedRect.Left = rect.Left; } if (rect.Top < s_combinedRect.Top) { s_combinedRect.Top = rect.Top; } if (rect.Right > s_combinedRect.Right) { rect.Right = s_combinedRect.Right; } if (rect.Bottom > s_combinedRect.Bottom) { rect.Bottom = s_combinedRect.Bottom; } screens.Add(info); return(true); }; if (WinApi.EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, callback, 0)) { Screens = screens.ToArray(); } else { Screens = new[] { new WinApi.MONITORINFO() { rcMonitor = Screen.PrimaryScreen.Bounds, rcWork = Screen.PrimaryScreen.WorkingArea, } }; } }