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目录
C#操作电脑多显示器设置的更多相关文章
- How to:Installshield判断操作系统是否为64位,并且为操作注册表进行设置
原文:How to:Installshield判断操作系统是否为64位,并且为操作注册表进行设置 IS脚本操作注册表在64位平台下必须有特殊的设置 if (SYSINFO.bIsWow64) then ...
- 电脑浅色显示器不显示怎么办,如何用PS去除logo底色
本人买了新电脑后,虽然电脑显示器颜色也不错,就是刚买回来提示个true color没正确安装,我也没在意,因为感觉电脑显示方面还是不错的,后来定做安装程序用logo图的时候,有个浅色背景色,自己没看出 ...
- 【Mac电脑】Burp 设置代理后提示“您的链接不是私密链接”的解决方案
一.遇到的问题 通过Burp Proxy代理抓包时,遇到的如下情况: 二.解决问题 (1)基础介绍 HTTPS协议是为了数据传输安全的需要,在HTTP原有的基础上,加入了安全套接字层SSL协议,通过C ...
- Mac电脑上怎么设置环境变量
https://jingyan.baidu.com/article/8065f87f47b29523312498e4.html 环境变量是电脑操作系统中常用的一些变量,作用类似于将一些常用命令所在的文 ...
- mac电脑http代理服务设置公司内网的相关配置
哈喽,亲爱的小伙伴们 ,今天给大家分享一下公司内网配置 http代理服务设置及外网访问 ,<这是mac电脑的噢> ===链接地址我的github项目 https://github.c ...
- C#中的Excel操作【1】——设置Excel单元格的内容,打开Excel文件的一种方式
前言 作为项目管理大队中的一员,在公司里面接触最多的就是Excel文件了,所以一开始就想从Excel入手,学习简单的二次开发,开始自己的编程之路! 程序界面 功能说明 打开文件按钮,可以由使用者指定要 ...
- 封装对NPOIExcel的操作,方便的设置导出Excel的样式
下载: http://pan.baidu.com/s/1boTpT5l 使用方法: 导入: 使用 ReadToDataTable方法 导出: NPOIExcel.ExcelManager manger ...
- sql server service broker中调用存储过程执行跨库操作,不管怎么设置都一直提示 服务器主体 "sa" 无法在当前安全上下文下访问数据库 "dbname"。
用sql server自带的消息队列service borker,调用存储过程中,执行了一个跨库的操作,先是用了一个用户,权限什么都给够了,但是一直提示 服务器主体 "user" ...
- Linux shell 操作 postgresql,并设置crontab任务
Linux shell 操作 postgresql:删除间隔日期的数据-删除指定日期的数据-vacuumdb 清理数据库 -清理日志 -定期执行脚本 *修改pg_hba.conf 设置本地连接无密码, ...
随机推荐
- .net2.0 Thread 多线程
序言 第1章 线程基础 System.Threading Join C#中的Thread中的ApartmentState几种状态(STA,MTA,Unknown)详解 System.Threadin ...
- linux下简易端口扫描器
#include<iostream> #include<string.h> #include<sys/types.h> #include<sys/socket ...
- JS常用正则表达式验证
一.电话+手机 重点是正则表达式: var myreg=/^[1][3,4,5,7,8][0-9]{9}$/; 表达式的意思是: 1--以1为开头: 2--第二位可为3,4,5,7,8,中的任意一位: ...
- layui 获取select option value 获取text
$.trim($("#processState").val()): //获取val $("#processState option:selected").tex ...
- javascript注
1.浮点数: e表示法(科学计数法-10的指数次幂): let floatNum = 3.12e2; //等于312 浮点数的最高精度是17位小数. 浮点数计算精度远不如整数,0.15加0.15的和是 ...
- .net sqlite 内存溢出 问题的分析与解决。
一个小的工具网站,用了sqlite数据库,在并发小的情况一切正常,但是并发量上来之后,就报"out of memory"错误了. 分析了代码,就是很简单的根据一个条件取一段数据,并 ...
- python调用c++/c 共享库,开发板上编译的一些坑!
1.对于python,ctypes只能load动态库,但现在我的对象是一个静态库,而且我没有源代码,静态库在编译过程中没有加--fPIC参数,所以我也没办法将其编译为动态库,有没有什么方法在pytho ...
- java基础笔记1--关于线程死锁
关于线程死锁 什么是死锁: 在编写多线程的时候,必须要注意资源的使用问题,如果两个或多个线程分别拥有不同的资源, 而同时又需要对方释放资源才能继续运行时,就会发生死锁. 简单来说:死锁就是当一个或多个 ...
- Python Module_oslo.vmware_连接 vCenter
目录 目录 前言 Install oslsvmware How to use the vSphere Web Service SDK 前言 oslo.vmware 是一个由 Python 实现的 vC ...
- Struts2测试题
今天给大家看一套我最近做的一套关于Struts2的题: 1.以下关于jQuery说法错误的选项是( D ). A.“$”为jQuery脚本库的默认全局变量名,即“$” = “jQuery” B.$.a ...