如何在C#中为Windows-7设置主监视器

我相信我将需要在SetDisplayConfig()中执行此操作的示例.我的Windows-7系统有两个监视器.当我的程序处于一种模式时,第一台显示器必须打开并处于主模式,第二台显示器必须关闭.在另一种模式下,反之亦然:关闭第一台显...

我相信我将需要在SetDisplayConfig()中执行此操作的示例.

我的Windows-7系统有两个监视器.当我的程序处于一种模式时,第一台显示器必须打开并处于主模式,第二台显示器必须关闭.在另一种模式下,反之亦然:关闭第一台显示器,打开第二台显示器,然后再启动.

我已经搜索了Windows SDK函数“ SetDisplayConfig()”,但没有找到任何方法. MSDN对SetDisplayConfig()的引用对我来说太深奥了,并且没有示例代码.

我使用ChangeDisplaySettingsEx()实现了该功能,但在Windows-7中此功能不稳定.

谢谢!

解决方法:

我目前还同时使用SetDisplayConfig()和ChangeDisplaySettingsEx(),发现这似乎可以用于我的设置. SDC_TOPOLOGY_INTERNAL和SDC_TOPOLOGY_EXTERNAL指的是Windows决定您的主(屏幕)和辅助(投影机)显示器是什么,类似于您按Win P时选择的显示器.这对我来说是另一回事,因此您必须检查正确的东西在您的配置之一.然后,您可以简单地调用InternalDisplay()或ExternalDisplay()来激活一个并自动停用另一个.为了完整起见,我添加了克隆并扩展了设置.

[DllImport("user32.dll", CharSet = CharSet.Unicode)]
private static extern long SetDisplayConfig(uint numPathArrayElements,
IntPtr pathArray, uint numModeArrayElements, IntPtr modeArray, uint flags);

UInt32 SDC_TOPOLOGY_INTERNAL = 0x00000001;
UInt32 SDC_TOPOLOGY_CLONE = 0x00000002;
UInt32 SDC_TOPOLOGY_EXTEND = 0x00000004;
UInt32 SDC_TOPOLOGY_EXTERNAL = 0x00000008;
UInt32 SDC_APPLY = 0x00000080;

public void CloneDisplays() {
  SetDisplayConfig(0, IntPtr.Zero, 0, IntPtr.Zero, (SDC_APPLY | SDC_TOPOLOGY_CLONE));
}

public void ExtendDisplays() {
  SetDisplayConfig(0, IntPtr.Zero, 0, IntPtr.Zero, (SDC_APPLY | SDC_TOPOLOGY_EXTEND));
 }

public void ExternalDisplay() {
  SetDisplayConfig(0, IntPtr.Zero, 0, IntPtr.Zero, (SDC_APPLY | SDC_TOPOLOGY_EXTERNAL));
}

public void InternalDisplay() {
  SetDisplayConfig(0, IntPtr.Zero, 0, IntPtr.Zero, (SDC_APPLY | SDC_TOPOLOGY_INTERNAL));
}

本文标题为:如何在C#中为Windows-7设置主监视器

基础教程推荐