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

时间:2013-05-28 10:56:05

标签: c# winapi multiple-monitors

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

  1. 仅限电脑
  2. 复制
  3. 扩展
  4. 仅投影仪
  5. 是否存在允许在这些显示模式之间切换的API调用?

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

3 个答案:

答案 0 :(得分:11)

如果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);

答案 1 :(得分:2)

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

  

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

检查此Codeproject project和此Stackoverflow question代码

答案 2 :(得分:2)

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

foldl

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

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

(此次通话的相关来源here

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