windows显示驱动开发-多监视器管理器(三)

处理现有的监视器配置

除了在双监视器配置中检测新监视器和启动暂时性多监视器管理器 (TMM) 对话框外,TMM 还必须还原以前的显示配置。 TMM 可以通过 IViewHelper::SetConfiguration 方法将显示数据传递给用户模式显示驱动程序来还原显示配置。 TMM 将分配内存,并将显示模式和拓扑信息存储在内存中。 TMM 在 SetConfiguration的 pIStream 参数指向的 IStream 接口中传递此内存。 用户模式显示驱动程序还可以修改或折叠其他显示数据 (例如 gamma 或电视设置) 。 驱动程序完成显示数据后,驱动程序将调用 IStream::Release 方法来释放内存。

下图显示了 TMM 还原现有监视器配置时发生的操作流。

确定平台是移动平台还是桌面平台

TMM 仅在移动计算机上运行,并在台式计算机上自动禁用。 硬件供应商应启用并使用自己的专有方法在台式计算机上进入克隆视图。 他们应确定平台是否为移动平台,以避免使用其专有方法在移动计算机上进入克隆视图,转而使用 TMM。

硬件供应商可以使用以下代码来确定平台是移动平台还是桌面平台。 然后,平台可以使用适当的机制进入克隆视图。

复制代码
#include <Powrprof.h>   // For GetPwrCapabilities

    BOOL IsMobilePlatform()
    {
        BOOL fIsMobilePlatform = FALSE;

        fIsMobilePlatform = (PlatformRoleMobile == PowerDeterminePlatformRole());

        POWER_PLATFORM_ROLE iRole;

        // Check if the operating system determines 
        // that the computer is a mobile computer.
        iRole = PowerDeterminePlatformRole();

        if (PlatformRoleMobile == iRole)
        {
            fIsMobilePlatform = TRUE;
        }
        else if (PlatformRoleDesktop == iRole) 
        // Can happen when a battery is not plugged into a laptop
        {
            SYSTEM_POWER_CAPABILITIES powerCapabilities;

            if (GetPwrCapabilities(&powerCapabilities))
            {
         // Check if a battery exists, and it is not for a UPS.
         // Note that SystemBatteriesPresent is set on a laptop even if the battery is unplugged.
                fIsMobilePlatform = ((TRUE == powerCapabilities.SystemBatteriesPresent) && (FALSE == powerCapabilities.BatteriesAreShortTerm));
            }
            // GetPwrCapabilities should never fail 
            // However, if it does, leave fReturn == FALSE.
        }

        return fIsMobilePlatform;
    }
相关推荐
love530love1 分钟前
【笔记】Intel oneAPI 开发环境配置
人工智能·windows·笔记·oneapi·onednn·deep neural
分布式存储与RustFS1 小时前
实测!Windows环境下RustFS的安装与避坑指南
人工智能·windows·rust·对象存储·企业存储·rustfs
浪潮IT馆1 小时前
删除Windows系统硬盘的EFI系统分区和恢复分区
windows
我就是你毛毛哥2 小时前
windows启动jmeter
windows·jmeter
取个名字太难了a2 小时前
重写 OpenProcess:绕过 Win32 API,直接进入 NT 内核(Win7 x86)
windows
MyBFuture2 小时前
C# 哈希表与堆栈队列实战指南
开发语言·windows·c#·visual studio
管理大亨2 小时前
Linux vs Windows:五大维度深度对决
linux·arm开发·windows
云技纵横5 小时前
Stream API 从入门到实践:常用操作、易错点与性能建议
开发语言·windows·python
独自归家的兔5 小时前
开发核心问题深度解析:通配符接口 + 第三方数据同步 + 九宫格算法
服务器·windows·microsoft
秋月的私语5 小时前
Windows Forms 多语言开发指南
windows·c#·form