private Screen(IntPtr monitor, IntPtr hdc)
        {
            if (!multiMonitorSupport || monitor == (IntPtr)PRIMARY_MONITOR)
            {
                Bounds     = GetVirtualScreen();
                Primary    = true;
                DeviceName = "DISPLAY";
            }
            else
            {
                var info = new NativeDisplayMonitors.MONITORINFOEX();

                NativeDisplayMonitors.GetMonitorInfo(new HandleRef(null, monitor), info);

                Bounds = new Rect(
                    info.rcMonitor.left, info.rcMonitor.top,
                    info.rcMonitor.right - info.rcMonitor.left,
                    info.rcMonitor.bottom - info.rcMonitor.top);

                Primary = ((info.dwFlags & MONITORINFOF_PRIMARY) != 0);

                DeviceName = new string(info.szDevice).TrimEnd((char)0);
            }
            hmonitor = monitor;
        }
 public static Screen FromHandle(IntPtr hwnd)
 {
     if (multiMonitorSupport)
     {
         return(new Screen(NativeDisplayMonitors.MonitorFromWindow(new HandleRef(null, hwnd), 2)));
     }
     return(new Screen((IntPtr)PRIMARY_MONITOR));
 }
 public static Screen FromPoint(Point point)
 {
     if (multiMonitorSupport)
     {
         var pt = new NativeDisplayMonitors.POINTSTRUCT((int)point.X, (int)point.Y);
         return(new Screen(NativeDisplayMonitors.MonitorFromPoint(pt, MONITOR_DEFAULTTONEAREST)));
     }
     return(new Screen((IntPtr)PRIMARY_MONITOR));
 }
        private Rect GetVirtualScreen()
        {
            var size = new Size(NativeDisplayMonitors.GetSystemMetrics(NativeDisplayMonitors.SM_CXSCREEN), NativeDisplayMonitors.GetSystemMetrics(NativeDisplayMonitors.SM_CYSCREEN));

            return(new Rect(0, 0, size.Width, size.Height));
        }
 static Screen()
 {
     multiMonitorSupport = NativeDisplayMonitors.GetSystemMetrics(NativeDisplayMonitors.SM_CMONITORS) != 0;
 }
 private Rect GetWorkingArea()
 {
     NativeDisplayMonitors.RECT rc = new NativeDisplayMonitors.RECT();
     NativeDisplayMonitors.SystemParametersInfo(NativeDisplayMonitors.SPI_GETWORKAREA, 0, ref rc, 0);
     return(new Rect(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top));
 }