예제 #1
0
        internal static Dpi Create(IntPtr hMonitor)
        {
            uint dpiX = 0;
            uint dpiY = 0;

            return(MultiMonitorNativeMethods.GetDpiForMonitor(hMonitor, MONITOR_DPI_TYPE.MDT_DEFAULT, ref dpiX, ref dpiY) == IntPtr.Zero ? new Dpi((int)dpiX, (int)dpiY) : Default);
        }
예제 #2
0
        public IEnumerator <Screen> GetEnumerator()
        {
            this.monitors = new List <Screen>();
            MultiMonitorNativeMethods.EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, EnumMonitors, IntPtr.Zero);

            return(this.monitors.GetEnumerator());
        }
        /// <summary>
        ///     指定した座標が含まれるスクリーンを取得します。
        /// </summary>
        /// <param name="point">検査する座標。</param>
        /// <returns>スクリーン情報。</returns>
        public static Screen FromPoint(Point point)
        {
            var pt = new POINT
            {
                X = (int)point.X,
                Y = (int)point.Y,
            };
            var hMonitor = MultiMonitorNativeMethods.MonitorFromPoint(pt, MonitorFlags.MONITOR_DEFAULTTONEAREST);

            return(Screen.Create(hMonitor));
        }
        /// <summary>
        ///     指定した四角形が含まれるスクリーンを取得します。
        /// </summary>
        /// <param name="rect">検査する四角形</param>
        /// <returns>スクリーン情報。</returns>
        public static Screen FromRectangle(Rect rect)
        {
            var rc = new RECT
            {
                Left   = (int)rect.Left,
                Right  = (int)rect.Right,
                Top    = (int)rect.Top,
                Bottom = (int)rect.Bottom,
            };
            var hMonitor = MultiMonitorNativeMethods.MonitorFromRect(ref rc, MonitorFlags.MONITOR_DEFAULTTONEAREST);

            return(Screen.Create(hMonitor));
        }
예제 #5
0
        internal static Screen Create(IntPtr hMonitor)
        {
            var monitorInfo = MONITORINFOEX.Create();
            var success     = MultiMonitorNativeMethods.GetMonitorInfo(hMonitor, ref monitorInfo);

            if (!success)
            {
                return(null);
            }

            var dpi = Dpi.Create(hMonitor);

            return(new Screen(hMonitor)
            {
                DeviceName = monitorInfo.szDevice,
                IsPrimary = monitorInfo.dwFlags == MultiMonitorNativeMethods.MONITORINFOF_PRIMARY,
                Dpi = dpi,
                Bounds = CreateRect(monitorInfo.rcMonitor, dpi),
                WorkingArea = CreateRect(monitorInfo.rcWork, dpi)
            });
        }
        /// <summary>
        ///     指定したウィンドウが表示されているスクリーンを取得します。
        /// </summary>
        /// <param name="windowHandle">ウィンドウハンドル。</param>
        /// <returns>スクリーン情報。</returns>
        internal static Screen FromHandle(IntPtr windowHandle)
        {
            var hMonitor = MultiMonitorNativeMethods.MonitorFromWindow(windowHandle, MonitorFlags.MONITOR_DEFAULTTONEAREST);

            return(Screen.Create(hMonitor));
        }