C#操作电脑多显示器设置
生活随笔
收集整理的這篇文章主要介紹了
C#操作电脑多显示器设置
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
電腦多顯示器設置
第一種方式
通過使用api函數(shù)SetDisplayConfig來設置。這種方式在某些電腦中設置有幾率會導致電腦黑屏
使用代碼如下:
private const uint SDC_APPLY = 0x00000080;
private const uint SDC_TOPOLOGY_INTERNAL = 0x00000001;
private const uint SDC_TOPOLOGY_CLONE = 0x00000002;
private const uint SDC_TOPOLOGY_EXTERNAL = 0x00000008;
private const uint SDC_TOPOLOGY_EXTEND = 0x00000004;
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
private static extern long SetDisplayConfig(uint numPathArrayElements, IntPtr pathArray, uint numModeArrayElements, IntPtr modeArray, uint flags);
/// <summary>
/// 設置屏幕的顯示模式
/// </summary>
/// <param name="type">模式(0 - 主屏 1 - 雙屏復制 2 - 雙屏擴展 3 - 第二屏幕</param>
/// <returns></returns>
public static void SetScreenMode(int type)
{
uint smode;
switch (type)
{
case 0:
smode = SDC_APPLY | SDC_TOPOLOGY_INTERNAL;
break;
case 1:
smode = SDC_APPLY | SDC_TOPOLOGY_CLONE;
break;
case 2:
smode = SDC_APPLY | SDC_TOPOLOGY_EXTEND;
break;
case 3:
smode = SDC_APPLY | SDC_TOPOLOGY_EXTERNAL;
break;
default:
smode = SDC_APPLY | SDC_TOPOLOGY_INTERNAL;
break;
}
SetDisplayConfig(0, IntPtr.Zero, 0, IntPtr.Zero, smode);
}
第二種方式
使用系統(tǒng)自帶的displayswitch.exe,該文件在C:WindowsSystem32DisplaySwitch.exe中,可以使用Process來調(diào)用cmd.exe來執(zhí)行displaySwitch.exe帶參數(shù)的命令,當然你也可以直接執(zhí)行已寫好腳本的.bat文件。
其中包含的參數(shù)示意:
僅電腦屏幕 displayswitch /internal
復制 displayswitch /clone
擴展 displayswitch /extend
僅第二屏幕 displayswitch /external
示例代碼如下:
public enum DisplaySwitchEnum
{
Default,
/// <summary>
/// 僅電腦屏幕
/// </summary>
Internal,
/// <summary>
/// 復制屏
/// </summary>
Clone,
/// <summary>
/// 擴展屏
/// </summary>
Extend,
/// <summary>
/// 僅第二屏幕
/// </summary>
External
}
public static void DisplaySwitch(DisplaySwitchEnum displaySwitch)
{
Process process = new Process();
string str = Environment.GetEnvironmentVariable("windir");//獲取系統(tǒng)目錄
string dir = "System32";
if (!Environment.Is64BitProcess)
{
dir = "SysNative";//非64位進程的使用這個目錄
}
process.StartInfo.WorkingDirectory = System.IO.Path.Combine(str, dir);
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.CreateNoWindow = true;
process.Start();
string cmd = string.Empty;
switch (displaySwitch)
{
case DisplaySwitchEnum.Clone:
cmd = "displayswitch.exe /clone";
break;
case DisplaySwitchEnum.Extend:
cmd = "displayswitch.exe /extend";
break;
case DisplaySwitchEnum.External:
cmd = "displayswitch.exe /external";
break;
case DisplaySwitchEnum.Internal:
cmd = "displayswitch.exe /internal";
break;
}
process.StandardInput.WriteLine(cmd);
process.Close();
}
其中需要特別注意的點是Process的WorkingDirectory的設置。在 x64版本的 Windows 操作系統(tǒng)下,會自動將 System32 的操作導引到 SysWOW64,所以在代碼中我增加了判斷當前應用程序來區(qū)分使用不同的系統(tǒng)目錄。
在x86應用在64位系統(tǒng)下使用C:windowsSysNative就能正常引導到C:windowssystem32目錄
總結
以上是生活随笔為你收集整理的C#操作电脑多显示器设置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高通Sensor驱动学习笔记
- 下一篇: 解决行内块元素(inline-block