Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将重复的监视器检测为单独的屏幕_C#_Multiple Monitors - Fatal编程技术网

C# 如何将重复的监视器检测为单独的屏幕

C# 如何将重复的监视器检测为单独的屏幕,c#,multiple-monitors,C#,Multiple Monitors,使用问题中的答案,我可以得到“屏幕”计数。但是,这似乎不适用于设置为“复制”的监视器(报告一个监视器而不是两个)。我的应用程序会提示用户从VGA切换到HDMI(这是在具有两个输出端口的设备上),然后在屏幕上显示“您看到了吗?”提示,以验证这两个视频端口是否正常工作 我试图在显示提示之前检测开关是否发生,但由于上述问题,代码没有看到监视器计数递减,然后递增(这就是我检测开关的方式) 如果所有内容都设置为“复制”,如何检测视频设备开关?如果监控器设置为“扩展”,则现有代码有效。还有一个始终存在的内部

使用问题中的答案,我可以得到“屏幕”计数。但是,这似乎不适用于设置为“复制”的监视器(报告一个监视器而不是两个)。我的应用程序会提示用户从VGA切换到HDMI(这是在具有两个输出端口的设备上),然后在屏幕上显示“您看到了吗?”提示,以验证这两个视频端口是否正常工作

我试图在显示提示之前检测开关是否发生,但由于上述问题,代码没有看到监视器计数递减,然后递增(这就是我检测开关的方式)

如果所有内容都设置为“复制”,如何检测视频设备开关?如果监控器设置为“扩展”,则现有代码有效。还有一个始终存在的内部视频设备(不尝试测试此设备)。

请参阅并使用提供的(在答案中已修复)QueryDisplayConfig包装器

将导入的签名更改为将
out DisplayConfigTopologyId拓扑
作为最后一个参数

使用
QueryDisplayFlags.DatabaseCurrent
作为显示标志,否则将获得状态87(无效参数)

调用QueryDisplayFlags后,拓扑将是
克隆
扩展

调用该方法

var status = CCDWrapper.QueryDisplayConfig(
    CCDWrapper.QueryDisplayFlags.DatabaseCurrent,
    ref numPathArrayElements, pathInfoArray, ref numModeInfoArrayElements,
    modeInfoArray, out currentTopologyId);

在我的测试中,
numpatharrayellements
总是作为当前使用的监视器数量返回。如果我把它改为“只显示屏幕1”,它说的是1个屏幕,拓扑内部。“仅显示屏幕2”返回时带有1个外部屏幕。《克隆人》显示了两个屏幕。

詹姆斯·巴勒斯的回答对我来说不起作用。我在这里给出了答案:

代码如下:

public static int GetScreenCount()
{
    ManagementObjectSearcher searcher =
        new ManagementObjectSearcher("root\\CIMV2",
        "SELECT * FROM Win32_PnPEntity where service =\"monitor\"");

    return searcher.Get().Count;
}

谢谢你的回答,但这只告诉我是否存在重复项,对吗?有没有办法知道目前连接了多少台显示器?@BradleyDotNET在我的测试中,Numpatharrayellements总是返回当前使用的显示器数量。如果将其更改为仅显示屏幕1,则表示1屏幕,拓扑内部。仅显示屏幕2返回1屏幕外部。克隆显示了两个屏幕。太好了!我还没有能够设置我的测试环境,所以我很感激这些信息。再次感谢。