C#操作电脑多显示器设置

电脑多显示器设置

第一种方式

通过使用api函数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);
}

第二种方式

使用系统自带的displayswitch.exe,该文件在C:\Windows\System32\DisplaySwitch.exe中,可以使用Process来调用cmd.exe来执行displaySwitch.exe带参数的命令,当然你也可以直接执行已写好脚本的.bat文件。

其中包含的参数示意:

仅电脑屏幕 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");//获取系统目录
    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 操作系统下,会自动将 System32 的操作导引到 SysWOW64,所以在代码中我增加了判断当前应用程序来区分使用不同的系统目录。

在x86应用在64位系统下使用C:\windows\SysNative就能正常引导到C:\windows\system32目录

原文地址:https://www.cnblogs.com/zzr-stdio/p/12093159.html

时间: 2024-10-06 16:01:59

C#操作电脑多显示器设置的相关文章

Linux零基础入学之1-3 RHEL7基本命令操作和启动级别设置

§Linux零基础入学之1-3 RHEL7基本命令操作和启动级别设置 [本节内容] *Linux终端介绍 *shell提示符 *Bash shell基本语法 *基本命令的使用:ls.pwd.cd *查看系统折BIOS设置 *Linux如何获得帮助 *Linux关机命令:shutdown.init 0等 *Linux 7个启动级别 *设置服务器在来电后自动开机 [Linux终端介绍] tty    控制台终端 pts    代表虚拟终端 tty1-tty6 > 刚进入的图形界面(桌面)为tty1

电脑护眼设置:蓝色光波过滤

本人高度近视,因此平时使用电脑时总会关注如何护眼,安卓手机上使用了app “蓝色光波过滤”,感觉不错,就想看看PC上有没有相应的软件,找倒是找到了,不过需要先安装安卓模拟器,本人极度讨厌麻烦=.=!,就此打住.不过,我就想系统上应该有类似的设置吧,还真让我找到了(求不黑~)... 本人win8系统,设置过程贴在下面 进入“控制面板”中的“硬件和声音”  然后进入“显示”,选择“颜色校准 ” 根据提示,一路Next,到RGB调节,当然中间也可以根据提示设置“gamma”光等  自己调整感受下效果,

How to:Installshield判断操作系统是否为64位,并且为操作注册表进行设置

原文:How to:Installshield判断操作系统是否为64位,并且为操作注册表进行设置 IS脚本操作注册表在64位平台下必须有特殊的设置 if (SYSINFO.bIsWow64) then //如果为64位操作系统 REGDB_OPTIONS = REGDB_OPTION_WOW64_64KEY ;   //则为注册表操作进行64位特殊设置 endif; /**底下照常操作注册表即可*/ How to:Installshield判断操作系统是否为64位,并且为操作注册表进行设置

未能启动虚拟电脑,由于下述物理网卡找不到,你可修改虚拟电脑的网络设置或停用之

打开从别的虚拟机导出来的Linux系统,导入到本地虚拟机后,打开该虚拟机时报如下错误: 点击‘更改网络设置’,出现如下界面: 将‘连接方式’从‘桥接’改为‘内部网络’即可. 未能启动虚拟电脑,由于下述物理网卡找不到,你可修改虚拟电脑的网络设置或停用之

电脑的IP设置

网线插到路由器的WAN口上,用网线从路由器的LAN口上连接到电脑,把电脑的IP设置成自动获取如果线都已经接好.我们这个时候随便打开一台连好的PC电脑.打开网上邻居属性,然后打开tcp/ip协议属性,设置ip,子网,网关.确定DNS在配置路由器完后在行设置的先输入ipconfig/all,然后回车然后分别ping一下两个网关, 步骤先打enable→config →intfacefast0/0→ipadd(配地址)? 原文地址:http://blog.51cto.com/14139507/2335

c# 多显示器设置主屏幕(Set primary screen for multiple monitors)

原文:c# 多显示器设置主屏幕(Set primary screen for multiple monitors) 经过google加各种百度,终于找到了一个有效的解决方案,下面是两个主要类,方便后人使用 1. Win32 API, 需要添加其它内容可以到这个网站从查找对应的c#实现 public class WinApi { public const Int32 CCHDEVICENAME = 32; public const Int32 CCHFORMNAME = 32; public en

电脑自动开机设置教程

对于很多办公人士来说,每天上班第一件事就是打开电脑,每天都要做这重复的事情,是不是感觉非常烦呢,今天笔者就告诉你:怎么设置电脑自动开机.设置电脑自动开机,不同的主板有不同的设置方法,但大同小异. 工具/原料 华硕主板 方法/步骤 首先,在电脑刚开机的时候点击键盘上的“Delete”键,进入BIOS主板设置,如图所示   由于在BIOS主板设置中,鼠标不能用,主要利用键盘来选择操作,除了要用+,-,esc,F10几个键外,还用到下图几个键,如图所示   选择“power”选项,如图所示   选择“

在VR中模拟用鼠标操作电脑并实现简单画图的小程序

(图没有录好,明天换一下) 一.概述 1.实现的基本操作是: 1)用手柄抓住黄色的方块代表手抓住鼠标. 2)通过移动手柄模拟鼠标移动,电脑屏幕上的光标跟着移动. 3)当光标移动到一个Button上时,Button高亮,离开时Button取消高亮,点击Button触发点击事件. 4)当点击Button之后,打开一个画图程序,可以用光标在颜色选择区选择一种颜色,然后在画图区根据光标的移动轨迹,画出选择颜色的光标移动路径的曲线: 2.脚本 1)ComputerController挂在代表电脑的Canv

电脑的一些设置

电脑设置启动项 开始 运行 输入msconfig 选择启动就可以设置啦 远程关机 shutdown -r -f   重启电脑 shutdown -t 10  延迟十秒关机