以编程方式更改“演示文稿显示模式”

演示文稿显示模式是您在使用Windows + p快捷方式时看到的模式

  1. 仅限计算机
  2. 重复
  3. 延伸
  4. 仅限投影仪

是否存在允许在这些显示模式之间切换的API调用?

我想以编程方式在显示器和HDMI电视之间切换(并同时做一堆其他事情,因此Windows + p没有用),但我正在打砖墙。

如果EnumDisplaySettingsEx和ChangeDisplaySettingsEx函数不适合您,您还可以使用:

private void SetDisplayMode(DisplayMode mode) { var proc = new Process(); proc.StartInfo.FileName = "DisplaySwitch.exe"; switch (mode) { case DisplayMode.External: proc.StartInfo.Arguments = "/external"; break; case DisplayMode.Internal: proc.StartInfo.Arguments = "/internal"; break; case DisplayMode.Extend: proc.StartInfo.Arguments = "/extend"; break; case DisplayMode.Duplicate: proc.StartInfo.Arguments = "/clone"; break; } proc.Start(); } enum DisplayMode { Internal, External, Extend, Duplicate } 

这将根据所需的配置使用不同的参数调用DisplaySwitcher。 你可以这样称呼:

  SetDisplayMode(DisplayMode.Extend); 

您可以使用EnumDisplaySettingsEx和ChangeDisplaySettingsEx获取和更改显示设置:

ChangeDisplaySettingsEx函数将指定显示设备的设置更改为指定的图形模式。

检查此Codeproject项目和此Stackoverflow问题以获取示例代码

您可以使用SetDisplayConfig()设置桌面显示模式,例如。

 SetDisplayConfig(0, NULL, 0, NULL, SDC_TOPOLOGY_EXTERNAL | SDC_APPLY); 

您可以使用QueryDisplayConfig()检索当前的显示模式。 例如。

 DISPLAYCONFIG_TOPOLOGY_ID currentTopology; QueryDisplayConfig(QDC_DATABASE_CURRENT, &PathArraySize, PathArray, &ModeArraySize, ModeArray, &currentTopology); 

( 此处此调用的相关来源)

这适用于C ++。 C#需要DLL导入。