public static IDictionary <IntPtr, Rect> GetMonitors() { var monitors = new Dictionary <IntPtr, Rect>(); MonitorEnumCallback @delegate = (IntPtr monitor, IntPtr context, ref Rect bounds, IntPtr data) => { monitors[monitor] = bounds; return(true); }; EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, @delegate, IntPtr.Zero); return(monitors); }
static void InitScreens() { if (multiMonitorSupport) { MonitorEnumCallback closure = new MonitorEnumCallback(); WinMethods.EnumMonitorsDelegate proc = new WinMethods.EnumMonitorsDelegate(closure.Callback); WinMethods.EnumDisplayMonitors(NullHandleRef, IntPtr.Zero, proc, IntPtr.Zero); if (closure.ScreenList.Count > 0) { Screen[] temp = new Screen[closure.ScreenList.Count]; closure.ScreenList.CopyTo(temp, 0); screens = temp; } else { screens = new Screen[] { new Screen((IntPtr)PRIMARY_MONITOR) }; } } else { screens = new Screen[] { new Screen((IntPtr)PRIMARY_MONITOR, IntPtr.Zero) }; } }
public static extern bool EnumDisplayMonitors( IntPtr hdc, IntPtr lprcClip, MonitorEnumCallback lpfnEnum, IntPtr dwData);