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

时间:2014-03-07 19:22:07

标签: c# multiple-monitors

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

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

如果所有内容都设置为重复,如何检测视频设备开关?如果监视器设置为“extend”,则现有代码有效。有一个内部视频设备也始终存在(不试图测试这个)。

2 个答案:

答案 0 :(得分:2)

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

更改导入的签名,使out DisplayConfigTopologyId topology作为最后一个参数。

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

调用QueryDisplayFlags后,拓扑将为CloneExtend等。

调用方法......

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

在我的测试中numPathArrayElements总是以当前使用中的监视器数量返回。如果我将其更改为"仅显示屏幕1",它表示1个屏幕,拓扑内部。 "仅显示屏幕2"回来时有1个外部屏幕。 "克隆"显示2个屏幕。

答案 1 :(得分:1)

James Barrass的回答对我不起作用。我最终得到了答案:link

以下是代码:

.bg {
  display: table; 
  width: 100%;
  height: 50%;
  background-image: image-url('pic.jpg');
  background-attachment: scroll;
  background-position: center center;
  background-repeat: no-repeat;
  background-size: cover;
  -webkit-background-size: cover;
  -moz-background-size: cover;
  -o-background-size: cover;
}

.bg-text{
  color: #fff;
  text-align: center;
  text-shadow: 1px 1px 12px rgba(0,0,0,0.5);
  margin-top: 150px;
}

.bg-text h1{
    font-size: 50px;
    font-weight: 700;
}