我目前也在摆弄两者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));
}