C++ C# 启用灰显的显示器序列号 --多屏器启用断开的显示器
环境:
win7 64 +VS2015
1,使用EnumDisplayDevices先枚举出电脑上面所有的显示器
C++ 代码
list<DISPLAY_DEVICE> dev_list; //设备列表
std::list<DISPLAY_DEVICE> devices;
std::list<DEVMODE> modes;
int devId = 0;
bool ret = false;
bool isPrimary = false;
do
{
DISPLAY_DEVICE displayDevice;
ZeroMemory(&displayDevice, sizeof(DISPLAY_DEVICE));
displayDevice.cb = sizeof(displayDevice);
ret = EnumDisplayDevices(NULL, devId, &displayDevice, 0);
if (ret == true)
{
//if ((displayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) == DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)
{
devices.push_back(displayDevice);
isPrimary = ((displayDevice.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) == DISPLAY_DEVICE_PRIMARY_DEVICE);
if (isPrimary)
PrimaryNum = devId;
}
}
devId++;
} while (ret);
dev_list = devices;
std::list<DISPLAY_DEVICE>::iterator it;
for (it = dev_list.begin(); it != dev_list.end(); it++)
{
DEVMODE deviceMode;
deviceMode.dmSize = sizeof(DEVMODE);
deviceMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_POSITION | DM_DISPLAYFREQUENCY | DM_DISPLAYFLAGS; // | DM_DISPLAYORIENTATION;
EnumDisplaySettings(it->DeviceName, (int)ENUM_REGISTRY_SETTINGS, &deviceMode);
modes.push_back(deviceMode);
}
经过上述操作 EnumDisplayDevices后 会拿到电脑上面已经连接的显示器和断开连接的显示器,其中正常连接的DISPLAY_DEVICE.StateFlags为1,未连接的为2
比如上图中 正常显示为2个,断开连接的为1个,但是有些机器可能会枚举到超过三个显示器的连接-目前还没查明原因,等后续有空研究了在补充
使用 ChangeDisplaySettingsEx来启用断开连接的显示器--已经经过验证是可以的
ChangeDisplaySettingsEx((LPCWSTR)DisplayDevice.DeviceName, &DevMode, NULL, CDS_UPDATEREGISTRY | CDS_NORESET, NULL);
ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL);
附上此段连接:https://stackoverflow.com/questions/35033525/attach-disabled-display-device-with-winapi
启用步骤总结:
1,调用 EnumDisplayDevices
2,调用 ChangeDisplaySettingsEx((LPCWSTR)DisplayDevice.DeviceName, &DevMode, NULL, CDS_UPDATEREGISTRY | CDS_NORESET, NULL);
ChangeDisplaySettingsEx(NULL, NULL, NULL, 0, NULL);
备注:
1,使用 sendmessage,setdisplayconfig有时候是无法启用断开的显示器
2,EnumDisplayDevices有时候可以枚举到多个不存在的显示器(除了正常和断开的显示器),不要紧,直接循环启用即可
C++ C# 启用灰显的显示器序列号 --多屏器启用断开的显示器相关推荐
- 使用自定义材质球,实现NGUI屏幕溶解和灰显
UITexture实现的溶解: 重设UITeture的材质球实现上述效果,把当前屏幕渲染的Texture2D丢给UITexture,即可实现UI屏幕特效,背景模糊等都可以. 难点主要是实时刷新问题 解 ...
- ALV Checkbox 单行灰显
用 Function Module REUSE_ALV_GRID_DISPLAY 处理 ALV Checkbox 时,只能整列灰显Checkbox. 而用 Function Module REUSE_ ...
- android sdk是灰的,Android Studio 2.3 sdk管理器标签灰显
Android Studio 2.3 - >配置 - > SDK管理器. 这些选项卡呈灰色显示: SDK工具,SDK更新站点.此外,"Show Package Details&q ...
- UGUI 图片灰显裁剪
今天项目出现一个问题,我们灰显的图片无法被viewport进行裁剪,因为灰显的图片使用了我们自定义的shader,然而里面却没有裁剪的功能. 所以网上搜了一下, 大概解决办法就是,用原生的UGUI的s ...
- 显示器序列号查询方式
序列号位置:位于显示器背部下方凹槽内 显示S/N或序号字段,可参考本文最下方图片 方式一:人工输入 方式二:微信提取文字,步骤如下 序列号拍照>发送到自己微信>长按图片>提取文字(i ...
- Android WebView 视频播放,全屏按钮不显示或灰显解决方案
Android WebView 视频播放,全屏按钮不显示或灰显解决方案 背景 问题定位 背景 在Android开发中,遇到了如下问题:Activity内嵌WebView,加载有视频的页面时,视频无法全 ...
- SystemUI添加第三方快捷开关时灰显问题分析
作者:neek.chen Android7.0上不仅有默认的快捷快关(QSTile),也允许客户自行添加第三方快捷开关(CustomTile).本文只介绍在绑定第三方CustomTile时遇到的间歇性 ...
- 一个获取电脑显示器序列号的VBS脚本
"获取电脑显示器序列号",这个任务通过反复尝试完成了.可惜,没法用,产品提的需求是获取显示器背后的标签上的序列号.我只听到"序列号"就信心满满的开工了.教训惨重 ...
- vue中的el-input设置灰显不可编辑
代码如下 <el-input disabled = "true"/> 上面的代码能实现输入框灰显,但是控制台会报错,具体报错如下: invalid prop: type ...
最新文章
- 聊聊 HashMap 和 TreeMap 的内部结构
- 未能加载文件或程序集“****”或它的某一个依赖项。试图加载格式不正确的程序。解决方案总结
- 8.17——继续熟悉linux的命令行
- 【Flutter】ListView 列表高级功能 ( ScrollController 上拉加载更多 )
- matlab常用代码总结
- github大学课程_GitHub基础教程:如何使用GitHub课程
- eclipse 中提示tomcat 的端口被占用了 后的最快捷解决方法
- python3.6.5安装步骤-Ubuntu16.04安装python3.6.5步骤详解
- HDOJ--1233--还是畅通工程
- 3、圆周运动与椭圆运动
- 微信公众号图片无法正常显示
- vba formula 公式的引用
- 求n至少为多大时,n个1组成的整数能被2013整除?
- 微信小程序 自动换行
- 长时间 正在加载个人设置 开机很慢
- ubuntu 安装 navicat
- echarts 5.x 版本词云无法正常显示问题
- 联系我们吧 - 12个联系我们表单和页面设计赏析和学习
- android eth0静态ip,在android中将静态IP设置为以太网
- react 引入远程 动态图片 和 引入本地 图片
热门文章
- bes2300之按键配置(二)
- android dts的作用,DTS相关知识
- 有必要稍微 吹一下苹果!
- 很遗憾,你们的问题我无法回答--Leo谈应届生求职(10)
- [JavaScript]基础(变量、数据类型)
- ThinkAdmin(CVE-2020-25540)漏洞复现
- 百面机器学习—7.K均值算法、EM算法与高斯混合模型要点总结
- 百面机器学习 -- No.2 特征工程 -- 训练数据不足的情况下会带来什么问题,如何缓解?
- 河南科技大学计算机科学与技术分数线,河南科技大学2020年录取分数线(附2017-2020年分数线)...
- 电脑任务管理器里的进程