• QT:显示器数量检测


    有个实际的需求,就是软件在运行期间只能使用单显示器,不允许多显示器运行,所以需要对显示器的个数进行检测。

    一般而言,显示器数量的检测可以等同于显示屏幕的检测,在QT中,我们可以通过获取screen的数量是否等于1来判断是否有外接的显示器设备

    但是,有这么2种情况需要考虑:

    1.软件被远程登陆控制(针对windows的远程桌面)

    2.显示器使用了克隆模式(即两个屏幕显示的内容一致)

    通过研究和测试:

    针对1的情况,我们获取到的screen的count等于0,在windows平台上我们可以通过外加判断远程登录是否使用来进一步排查。

    针对2的情况,比较复杂一些,windows和Mac的处理方式不太一样

    在windows上,可以通过一下方法获取,核心是使用QueryDisplayConfig方法,可以参考MSDN:https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-querydisplayconfig.

    int GetDisplayMonitorNum()
    {
    	UINT32 PathArraySize = 0;
    	UINT32 ModeArraySize = 0;
    	DISPLAYCONFIG_PATH_INFO* PathArray;
    	DISPLAYCONFIG_MODE_INFO* ModeArray;
    	DISPLAYCONFIG_TOPOLOGY_ID CurrentTopology;
    
    	GetDisplayConfigBufferSizes(QDC_ALL_PATHS, &PathArraySize, &ModeArraySize);
    	PathArray = (DISPLAYCONFIG_PATH_INFO*)malloc(PathArraySize * sizeof(DISPLAYCONFIG_PATH_INFO));
    	memset(PathArray, 0, PathArraySize * sizeof(DISPLAYCONFIG_PATH_INFO));
    
    	ModeArray = (DISPLAYCONFIG_MODE_INFO*)malloc(ModeArraySize * sizeof(DISPLAYCONFIG_MODE_INFO));
    	memset(ModeArray, 0, ModeArraySize * sizeof(DISPLAYCONFIG_MODE_INFO));
    	LONG ret = QueryDisplayConfig(QDC_ONLY_ACTIVE_PATHS, &PathArraySize, PathArray, &ModeArraySize, ModeArray, NULL);
    	if (ret == ERROR_SUCCESS)
    	{
    		return (int)PathArraySize;
    	}
    	else
    	{
    		return -1;
    	}
    }
    

     在Mac上可以使用如下方法: 核心在于CGGetActiveDisplayList方法和CGDisplayIsInHWMirrorSet方法,后一个方法可以判断是否存在镜像

    //get monitor nums
    int util_mac::getDisplayMonitorNums()
    {
        CGDisplayCount numDisplays;
        CGDisplayErr err;
        err=CGGetActiveDisplayList(0, 0, &numDisplays);
        if(err!=CGDisplayNoErr)
        {
            qDebug()<<"get list of displays error ";
            return 0;
        }
        //如果超过1个,则直接返回
        if(numDisplays>1)
            return numDisplays;
        //如果是1个情况下,检查一下是否存在镜像
        bool isMirror=CGDisplayIsInHWMirrorSet(CGMainDisplayID())!=0;
        if(isMirror)
            return 2;
        return 1;
    }
    

      

  • 相关阅读:
    react-native-开发环境搭建
    深入理解js中的立即执行函数(function(){…})()
    html-webpack-plugin详解
    window.getComputedStyle——ref
    react-hot-loader 的配置【局部刷新】--{create-react-app}
    es6 export、import
    echarts 金字塔
    JFinal源码详解
    如何使用JFinal开发javaweb
    MySQL如何修改密码
  • 原文地址:https://www.cnblogs.com/chyshx/p/14335402.html
Copyright © 2020-2023  润新知