首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示计数(公司禁用显示器)

显示计数(公司禁用显示器)
EN

Stack Overflow用户
提问于 2016-05-28 16:45:12
回答 1查看 164关注 0票数 2

大家好,大家都是stackoverflow.com的新手。我不知道怎么问这个问题,但要尽我最大的努力。做了,做了不少关于课题的研究,却找不到一件事来解决问题。

示例:试图识别Windows 7-10系统中活动和禁用显示的计数。

代码GPUAvailability

代码语言:javascript
复制
        private int MonCount;
    [DllImport("User32.dll")]
    private static extern bool EnumDisplayDevices(
        string lpDevice, int iDevNum,
        ref DISPLAY_DEVICE lpDisplayDevice, int dwFlags);

    [StructLayout(LayoutKind.Sequential)]
    public struct DISPLAY_DEVICE
    {
        public int cb;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
        public string DeviceName;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
        public string DeviceString;
        public int StateFlags;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
        public string DeviceID;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
        public string DeviceKey;

        public DISPLAY_DEVICE(int flags)
        {
            cb = 0;
            StateFlags = flags;
            DeviceName = new string((char)32, 32);
            DeviceString = new string((char)32, 128);
            DeviceID = new string((char)32, 128);
            DeviceKey = new string((char)32, 128);
            cb = Marshal.SizeOf(this);
        }
    }
    public void MonitorCheck()
    {
        DISPLAY_DEVICE lpDisplayDevice = new DISPLAY_DEVICE(0);     // OUT
        DISPLAY_DEVICE monitor_name = new DISPLAY_DEVICE(0);        // OUT

        int devNum = 0;
        while (EnumDisplayDevices(null, devNum, ref lpDisplayDevice, 0))
        {

            listBox1.Items.Add("\ndevNum =" + devNum);
            listBox1.Items.Add("cb =" + lpDisplayDevice.cb);
            listBox1.Items.Add("DeviceID =" + lpDisplayDevice.DeviceID);
            listBox1.Items.Add("DeviceKey =" + lpDisplayDevice.DeviceKey);
            listBox1.Items.Add("DeviceName =" + lpDisplayDevice.DeviceName.Trim());
            listBox1.Items.Add("DeviceString =" + lpDisplayDevice.DeviceString.Trim());
            // Show monitor name:
            EnumDisplayDevices(lpDisplayDevice.DeviceName, 0, ref monitor_name, 0);
            listBox1.Items.Add("Monitor name =" + monitor_name.DeviceString.Trim());
            ++devNum;
        }
    }

来源:如何获取C#监视器名称

返回:所有可附加的监视器由图形适配器信息。计数总是显示适配器中可以附加多少监视器。

代码活动显示:

代码语言:javascript
复制
Screen.AllScreens.Count();

返回:活动监视器计数。

问题:

如果GPU有3个输出:*上面的GPUAvailability代码返回:3(不管有多少显示器附加到它。)

如果附加了2个监视器(例如:膝上型显示器+外部HDMI监视器),但显示设置设置为:仅为:膝上型显示器(外部HDMI不是活动的) ->活动显示代码返回:1

问题

如何返回2,因为有非活动显示和活动显示器附加(膝上型电脑监视器+非活动外部监视器)?

解决方案

如何解决这一问题几乎没有什么想法:

  1. 通过扩展所有显示并简单地重做:Screen.AllScreens.Count();来激活它们

思想:比较GPUAvailability输出的输出和计数所有作为monitor_name.DeviceString.Trim()的值(然而,我已经在拥有NVIDIA适配器的桌面上测试了这一点:结果为空,但在笔记本英特尔高清适配器:输出总是“通用PnP-监视器”,所以,这不是解决方案)。

EN

回答 1

Stack Overflow用户

发布于 2016-05-28 18:02:54

愚蠢的我。永远不要使用这三种方法来解决问题。(在论坛上,要让代码在代码标记中工作似乎非常困难。

  • 最大可附显示
  • 当前附加的显示器
  • 当前活动显示器

解决方案:

嗯,似乎无法将我的代码附加到堆栈溢出回复中,所以:

巴斯丁:监测器计数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37501512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档