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;
    }
相关推荐
Chief_fly6 小时前
【Windows 下载 ARM64 deb 包 麒麟 ARM 离线安装】
arm开发·windows
阿昭L6 小时前
ZwQuerySystemInformation通过PsLoadedModuleList枚举内核模块
windows·逆向工程·windows内核
桑榆41610 小时前
双系统(Windows + Ubuntu)安装流程
linux·windows·ubuntu
走,带你去玩19 小时前
windows电脑 trae对接lanhu-mcp
windows
戒了,最后一次1 天前
Windows 安装 FFmpeg 完整教程(附环境变量配置 + 常用命令示例)
windows·ffmpeg
liulilittle1 天前
DeepSeek Harness 自定义模型提供商配置
前端·javascript·人工智能·windows·llm·deepseek·harness
fruge1 天前
Windows部署MiGPT GUI:小爱音箱接入大模型、TTS与自定义人设
windows
源码学社1 天前
DeerFlow Windows 本地运行教程(uv)
windows·uv·沙箱·deerflow·超级智能体·deerflow安装
Sombra_Olivia1 天前
复现Windows Server服务RPC请求缓冲区溢出漏洞(MS08067)
网络·windows·安全·web安全·网络安全·渗透测试·vulhub
-天道酬勤-1 天前
查看Windows电脑开机时间
windows·电脑