【发布时间】:2013-05-28 10:56:04
【问题描述】:
演示显示模式是您在使用 Windows+p 快捷方式时看到的那些:
- 仅限电脑
- 复制
- 扩展
- 仅限投影仪
是否存在任何允许在这些显示模式之间切换的 API 调用?
我想以编程方式在显示器和 HDMI 电视之间切换(并同时做很多其他事情,因此 Windows+p 没有用),但我撞砖墙。
【问题讨论】:
标签: c# winapi multiple-monitors
演示显示模式是您在使用 Windows+p 快捷方式时看到的那些:
是否存在任何允许在这些显示模式之间切换的 API 调用?
我想以编程方式在显示器和 HDMI 电视之间切换(并同时做很多其他事情,因此 Windows+p 没有用),但我撞砖墙。
【问题讨论】:
标签: c# winapi multiple-monitors
如果 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 project 和此Stackoverflow question 示例代码
【讨论】:
您可以使用SetDisplayConfig()设置桌面显示模式 例如。
SetDisplayConfig(0, NULL, 0, NULL, SDC_TOPOLOGY_EXTERNAL | SDC_APPLY);
您可以使用QueryDisplayConfig() 检索当前显示模式。 例如。
DISPLAYCONFIG_TOPOLOGY_ID currentTopology;
QueryDisplayConfig(QDC_DATABASE_CURRENT, &PathArraySize, PathArray, &ModeArraySize, ModeArray, ¤tTopology);
(此电话的相关来源here)
这是针对 C++ 的。 C# 需要 DLL 导入。
【讨论】: