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); }
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)); }
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)); }