The presentation display modes are those you see when using the Windows+p shortcut:
You can set the desktop display mode with SetDisplayConfig() eg.
SetDisplayConfig(0, NULL, 0, NULL, SDC_TOPOLOGY_EXTERNAL | SDC_APPLY);
You can retrieve the current display mode with QueryDisplayConfig(). eg.
DISPLAYCONFIG_TOPOLOGY_ID currentTopology;
QueryDisplayConfig(QDC_DATABASE_CURRENT, &PathArraySize, PathArray, &ModeArraySize, ModeArray, ¤tTopology);
(Related source for this call here)
This is for C++. C# would require DLL imports.
In case the EnumDisplaySettingsEx and ChangeDisplaySettingsEx functions do not work for you, you can also use this:
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
}
This will call the DisplaySwitcher with different arguments based on the required configuration. You can thus call:
SetDisplayMode(DisplayMode.Extend);
You can obtain and change the display setting using EnumDisplaySettingsEx and ChangeDisplaySettingsEx:
The ChangeDisplaySettingsEx function changes the settings of the specified display device to the specified graphics mode.
Check this Codeproject project and this Stackoverflow question for example code