public static List <DisplayInfo> GetDisplays() { var list = new List <DisplayInfo>(); try { User32.EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, (IntPtr hMonitor, IntPtr hdcMonitor, ref NativeRect lprcMonitor, IntPtr dwData) => { var mi = new MonitorInfoEx(); mi.Init(); mi.size = Marshal.SizeOf(mi); mi.size = 72; var success = User32.GetMonitorInfo(hMonitor, ref mi); if (success) { var di = new DisplayInfo(); di.MonitorArea = mi.monitor; di.WorkArea = mi.work; di.PrimaryDisplay = (mi.flags & 1) != 0; di.LogicalScreenHeight = GDI32.GetDeviceCaps(hMonitor, (int)GDI32.DeviceCap.VERTRES); di.PhysicalScreenHeight = GDI32.GetDeviceCaps(hMonitor, (int)GDI32.DeviceCap.DESKTOPVERTRES); // TransformToPixels(0, 0, out var x, out var y); uint dpiX; uint dpiY; try { ShCore.GetDpiForMonitor( hMonitor, MonitorDpiType.MDT_EFFECTIVE_DPI, out dpiX, out dpiY ); } catch { dpiX = 96; dpiY = 96; } di.scaleFactor2 = dpiX / 96f; list.Add(di); } else { Logger.Debug("Getting monitor info failed"); } return(true); }, IntPtr.Zero); AddAdditionalInfos(list); } catch (Exception e) { Logger.Exception(e); } return(list); }
private static bool MonitorEnumCallBack(IntPtr hMonitor, IntPtr hdcMonitor, ref RectStruct lprcMonitor, IntPtr dwData) { MonitorInfoEx mon_info = new MonitorInfoEx(); mon_info.Init(); mon_info.Size = Marshal.SizeOf(mon_info); GetMonitorInfo(hMonitor, ref mon_info); ///Monitor info is stored in 'mon_info' return(true); }
private void UpdateDPIText() { var hMonitor = PerMonitorDPIHelper.GetMonitorFromWindow(this); MonitorInfoEx monitorInfo = new MonitorInfoEx(); monitorInfo.Init(); GetMonitorInfo(hMonitor, ref monitorInfo); var monitorRect = monitorInfo.Monitor; DPI.Text = "Window Information" + "\n\tSystem DPI = " + PerMonitorDPIHelper.GetSystemDPI() + "\n\tWPF Rendering DPI = " + this.WpfDPI + "\n\tMonitor DPI = " + this.CurrentDPI + string.Format("\n\tMonitor Dimensions = X:{0} Y:{1} Width:{2} Height: {3}", monitorRect.Left, monitorRect.Top, monitorRect.Right - monitorRect.Left, monitorRect.Bottom - monitorRect.Top) + "\n\tWindow Size in Physical Pixels = " + (this.ActualWidth * this.WpfDPI / 96.0) + " x " + (this.ActualHeight * this.WpfDPI / 96.0); }
/// <summary> /// Returns the number of Displays using the Win32 functions /// </summary> /// <returns>collection of Display Info</returns> public static DisplayInfoCollection GetDisplays() { DisplayInfoCollection col = new DisplayInfoCollection(); try { EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, delegate(IntPtr hMonitor, IntPtr hdcMonitor, ref Rect lprcMonitor, IntPtr dwData) { MonitorInfoEx mi = new MonitorInfoEx(); mi.Init(); mi.size = Marshal.SizeOf(mi); mi.size = 72; bool success = GetMonitorInfo(hMonitor, ref mi); if (success) { DisplayInfo di = new DisplayInfo(); di.ScreenWidth = (mi.monitor.right - mi.monitor.left).ToString(); di.ScreenHeight = (mi.monitor.bottom - mi.monitor.top).ToString(); di.MonitorArea = mi.monitor; di.WorkArea = mi.work; di.Availability = mi.flags.ToString(); di.DeviceName = mi.DeviceName; col.Add(di); } else { Debug.Log("getting monitor info failed"); } return(true); }, IntPtr.Zero); AddAdditionalInfos(col); } catch (System.Exception e) { Debug.LogError(e); } return(col); }