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 设置本地连接无密码, ...
随机推荐
- vue学习-day02(自定义指令,生命周期)
目录: 1.案例:品牌管理 2.Vue-devtools的两种安装方式 3.过滤器,自定义全局或私有过滤器 4.鼠标按键事件的修饰符 5.自定义全局指令:让文本框获取焦点 ...
- 观察者模式------《Head First 设计模式》
第二章---观察者模式 xzmxddx 学习方式:书籍<Head First 设计模式>,这本书通俗易懂,所有知识点全部取自本书. 面向对象设计原则 封装变化 多用组合,少用继承 针对接口 ...
- 基于OpenCV/TensorFlow的手写MNIST文字匹配
手写文字具有哪些统一特征?用ML和SVM是如何做到的? 检测 特征匹配 文字识别 毕竟汉语言文字奇形怪状,很不好辨认,尤其是手写体,跟英文字母不同. MNIST一共有哪些库 现实环境更是复杂 有时还只 ...
- Pycharm,出现Invalid VCS root mapping The directory 解决方法
Pycharm File 中setting-------version control 中VCS选择none 后选择ok 执行完以上的步骤,还错误就会消失.
- csc.exeCPU100%
可以通过nuget把Microsoft.CodeDom.Providers.DotNetCompilerPlatform和Microsoft.Net.Compilers这两个包卸载
- Win7,win10(部分机型) 安装appscan9.0.3.10(可升级)实操流程
Win10部分机型不能很好的兼容appscan,建议使用者用win7系统安装appscan 写于:2018.12.2 IBM Security AppScan Standard 可通过自动执行应用安全 ...
- 简单记录一下vue生命周期及 父组件和子组件生命周期钩子执行顺序
首先,vue生命周期可以用下图来简单理解 当然这也是官方文档的图片,详细的vue周期详解请参考这里 然而当同时存在父子组件的时候生命周期钩子是如何执行的呢? 请看下文: 加载渲染过程父beforeCr ...
- sqli-libs(7)
导出文件GET字符型注入 0x01介绍 导出到文件就是可以将查询结果导出到一个文件中,如常见的将一句话木马导出到一个php文件中,sqlmap中也有导出一句话和一个文件上传的页面 常用的语句是: s ...
- java中的过滤器 --Filter
package filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.Filter ...
- 一致性hash算法Consistent Hashing
一致性hash算法Consistent Hashing 对于原有hash算法hash%n so... 1.话不多说直接上代码,原理或详解自行百度即可 import cn.pheker.utils.Ut ...