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);
        }
Beispiel #2
0
        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);
    }