7

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

  1. 仅限电脑
  2. 复制
  3. 延长
  4. 仅限投影仪

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

我想以编程方式在显示器和 HDMI 电视之间切换(并同时做很多其他事情,因此Windows+p没有用),但我遇到了障碍。

4

3 回答 3

13

如果 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);
于 2013-05-28T11:56:52.883 回答
2

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

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

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

于 2013-05-28T11:23:11.727 回答
2

您可以使用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 导入。

于 2017-01-17T01:44:05.833 回答