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