C# 如何将重复的监视器检测为单独的屏幕
使用问题中的答案,我可以得到“屏幕”计数。但是,这似乎不适用于设置为“复制”的监视器(报告一个监视器而不是两个)。我的应用程序会提示用户从VGA切换到HDMI(这是在具有两个输出端口的设备上),然后在屏幕上显示“您看到了吗?”提示,以验证这两个视频端口是否正常工作 我试图在显示提示之前检测开关是否发生,但由于上述问题,代码没有看到监视器计数递减,然后递增(这就是我检测开关的方式) 如果所有内容都设置为“复制”,如何检测视频设备开关?如果监控器设置为“扩展”,则现有代码有效。还有一个始终存在的内部视频设备(不尝试测试此设备)。请参阅并使用提供的(在答案中已修复)QueryDisplayConfig包装器 将导入的签名更改为将C# 如何将重复的监视器检测为单独的屏幕,c#,multiple-monitors,C#,Multiple Monitors,使用问题中的答案,我可以得到“屏幕”计数。但是,这似乎不适用于设置为“复制”的监视器(报告一个监视器而不是两个)。我的应用程序会提示用户从VGA切换到HDMI(这是在具有两个输出端口的设备上),然后在屏幕上显示“您看到了吗?”提示,以验证这两个视频端口是否正常工作 我试图在显示提示之前检测开关是否发生,但由于上述问题,代码没有看到监视器计数递减,然后递增(这就是我检测开关的方式) 如果所有内容都设置为“复制”,如何检测视频设备开关?如果监控器设置为“扩展”,则现有代码有效。还有一个始终存在的内部
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屏幕外部。克隆显示了两个屏幕。太好了!我还没有能够设置我的测试环境,所以我很感激这些信息。再次感谢。