需求的提出:

最近做了个三维的程序,部署到客户机器上,客户看了后,现场提出这样的一个需求:程序能智能探测接入的显示器个数,当有新的显示器接入时,现有的只在一个显示器上显示的三维场景能投递到新插入的显示器上显示。类似在桌面上点击鼠标右键,选择“显示设置”菜单,弹出的如下界面:

然后在此界面,对显示器进行复制、横向、纵向等处理。

可以在程序中开启一个线程,进行探测,探测到显示器个数增加后,调用SetDisplayConfig(0, NULL, 0, NULL, SDC_TOPOLOGY_CLONE | SDC_APPLY);函数进行复制显示器,一旦显示器复制成功,三维程序就会投递到新插入的显示器上,代码如下:

void checkDisplayNumsChangedFun();// 获取本机显卡接入的显示器个数
int getAllMonitors();// 上次查询时显示器的个数
int g_nMonitorCount = 0;int main(int argc, char *argv[])
{QApplication a(argc, argv);std::thread* pDisplay = new std::thread(checkDisplayNumsChangedFun);return a.exec();
}// 检测显示器个数是否变化了,如果检测到显示器数目增多了,就复制显示器
void checkDisplayNumsChangedFun()
{while (true){std::this_thread::sleep_for(std::chrono::milliseconds(5000));int nMonitorCount = getAllMonitors();// 显示器个数减少了,直接返回,不处理显示器减少的情况,也许是某个显示器被人拨掉了if (g_nMonitorCount >= nMonitorCount){continue;}CLogToolKits::getInstance()->writeLog(L"有新的显示器插入到主机!");//change to the clone topologySetDisplayConfig(0, NULL, 0, NULL, SDC_TOPOLOGY_CLONE | SDC_APPLY); g_nMonitorCount = nMonitorCount;}
}int getAllMonitors()
{std::list<DISPLAY_DEVICE> devices;std::list<DEVMODE> modes;int devId = 0;bool ret = false;bool isPrimary = false;int nPrimaryNum = 0;//list all DisplayDevices (Monitors)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){nPrimaryNum = devId;}}}devId++;} while (ret);list<DISPLAY_DEVICE> dev_list;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);}return modes.size();
}

更多对显示器的操作,请参考《VC++编程实现多显示器控制(复制、横屏、纵屏,显示器个数)》

C++编程实现多显示器控制(复制、横屏、纵屏,显示器个数)等相关推荐

  1. 入党对程序员有什么用_为什么程序员都喜欢用两个大屏显示器?网友:一个复制一个粘贴...

    如今的程序员似乎对办公电脑的配置要求非常高,连一些相对普通的配置都不入他们的"法眼"!都要比较先进的配置.不过想想也是,毕竟电脑是他们天天打交道的玩意.然而笔者却发现,程序员的办公 ...

  2. 自学python单片机编程-用Python语言控制单片机

    早年,虽然Python是一款比较容易上手的脚本语言,而且有强大的社区支持,一些非计算机专业领域的人都选它作为入门语言.遗憾的是,它不能实现一些非常底层的操控,所以在硬件领域并不起眼.本文引用地址:ht ...

  3. 自学python单片机编程-用Python语言控制单片机-可编程逻辑-与非网

    早年,虽然 Python 是一款比较容易上手的脚本语言,而且有强大的社区支持,一些非计算机专业领域的人都选它作为入门语言.遗憾的是,它不能实现一些非常底层的操控,所以在硬件领域并不起眼. 然而今时不同 ...

  4. Python黑帽编程2.4 流程控制

    Python黑帽编程2.4  流程控制 本节要介绍的是Python编程中和流程控制有关的关键字和相关内容. 2.4.1 if -..else 先上一段代码: #!/usr/bin/python # - ...

  5. java 线程 condition_Java编程中实现Condition控制线程通信

    java中控制线程通信的方法 1.传统的方式:利用synchronized关键字来保证同步,结合wait(),notify(),notifyall()控制线程通信.不灵活. 2.利用condition ...

  6. 要显示的8个字符已存放在以BUF开始的存储区单元中(称为显示缓冲区),依次送到LED显示器中显示。CPU通过P0口和P2口控制8位LED显示器,LED为共阴极显示器。

    目录 题目 1.0绘制电路图protues: 2.0程序代码: 3.0 protues仿真: 在uvision下生成hex文件 protues添加hex文件 仿真 题目 要显示的8个字符已存放在以BU ...

  7. Python学习之道-串口编程TEMI880温箱控制

    Python学习之道-串口编程&TEMI880温箱控制 一.环境准备 安装pyserial库 pyserial库常用函数介绍 参考例程 二.开发实践 1.实践项目 2.协议介绍 2.1 一般的 ...

  8. unity 多台 显示器 控制_设计专业显示器,哪些参数重要?明基PD2700U显示器给你答案...

    掐指一算,马上就要到女神节了!很多男同胞们都在绞尽脑汁为女朋友挑选礼物,口红包包衣服这些想必大家都了解了,但其实送礼物还是要对症下药.如果你的女神是设计师,那这件礼物非常不错,是专业为设计师打造的,远 ...

  9. 使用win10自带功能,横屏、竖屏显示器分别设置壁纸

    两台扩展显示器横屏.竖屏分别设置壁纸 问题:使用win10的多显示器设置,设定为"扩展这些显示器"后,默认将主显示器的壁纸用到扩展显示器上,但是我的主显示器是横屏的,壁纸在扩展你显 ...

最新文章

  1. 预防session劫持
  2. 专访阿里云MVP王俊杰:开发者的超能力是用技术让世界更美好
  3. JDBC预状态通道设置时间格式的问题
  4. Kindle使用技巧
  5. ACM 题目分类POJ(自用,精)
  6. JS之BOM和DOM(来源、方法、内容、应用)
  7. 原生js实现选中所有的checkbox
  8. SP913 QTREE2 - Query on a tree II
  9. F5实现2台机器的热备 Priority Group Activation
  10. Linux开发_多线程编程
  11. 《Python 学习手册4th》 第十六章 函数基础
  12. C# internal和public
  13. python之输出语句
  14. 来自大数据的反思:需要你读懂的10个小故事
  15. 电商系统数据库设计原则
  16. phpdesigner 的配置
  17. 【渝粤题库】陕西师范大学209020 史记研究 作业(专升本)
  18. qq空间显示手机型号android,qq空间如何设置显示手机型号
  19. python打印九九乘法表上三角_用Python打印九九乘法表正三角和倒三角。
  20. php 解析mpp 格式文件

热门文章

  1. BIOS-CXL CxlCommonServices 源码解析
  2. Python:使用opennsfw2对图片/视频进行鉴黄识别
  3. apt安装遇到的问题
  4. 一份不满十八岁禁止观看的数据分析报告
  5. Duang Duang Duang,CorelDRAW X7最新活动,这个你必须得加入!
  6. vs2019 MFC实现office界面的画图小项目(超超级详细)
  7. 加速商业化的知乎,与不断出走的大V
  8. js flyout 2: VScroll
  9. HTML、CSS、JavaScript学习(Web前端基础)
  10. 谷歌开发者:看可口可乐公司是怎么玩转 TensorFlow 的?