当前位置: 首页 > news >正文

深入解析:windows显示驱动开发-CCD api的摘要及方案(一)

QueryDisplayConfig 摘要

调用方可以使用 QueryDisplayConfig 枚举以下信息之一:

  • 当前连接的监视器集合可能的所有单独路径。 然后,调用方可以组合路径来构造可能的拓扑。
  • 当前处于活动状态的所有路径。
  • 活动路径,因为它们当前在已连接的显示集的持久性数据库中定义。
  • 源和目标模式,以及每个路径的方向、缩放、布局和连接器类型。
  • 当前拓扑映射到的热键选项。
QueryDisplayConfig 配置方案

在以下方案中调用 QueryDisplayConfig:

  • 显示控制面板小程序调用 QueryDisplayConfig ,以在控制面板首次启动时使用当前应用的拓扑填充控制面板的用户界面。 当前应用的拓扑包括启用强制投影的显示。
  • 显示控制面板小程序调用 QueryDisplayConfig 来枚举填充 多显示器 下拉列表框的所有可能路径。
  • 在控制面板用户界面启动之前,显示热键将调用 QueryDisplayConfig 以获取当前设置的显示选项(即克隆、内部、外部或扩展)。
  • 第三方应用程序可能会调用 QueryDisplayConfig 来查询数据库中存储的当前设置,以获取连接的显示器集。
GetDisplayConfigBufferSizes 摘要

调用方可以使用 GetDisplayConfigBufferSizes 获取调用方对 QueryDisplayConfig CCD 函数所需的信息。

LONG GetDisplayConfigBufferSizes([in]  UINT32 flags,[out] UINT32 *numPathArrayElements,[out] UINT32 *numModeInfoArrayElements
);

参数

[in] flags:要检索的信息的类型。 Flags 参数的值必须是下列值之一。

  • QDC_ALL_PATHS
  • 调用方请求表大小以保存所有可能的路径组合。
  • QDC_ONLY_ACTIVE_PATHS
  • 调用方请求表大小以仅保留活动路径。
  • QDC_DATABASE_CURRENT
  • 调用方请求表大小,以保存当前连接的监视器的持久性数据库中定义的活动路径。

[out] numPathArrayElements:指向接收路径信息表中元素数的变量的指针。 然后,对 QueryDisplayConfig 函数的后续调用将使用 pNumPathArrayElements 参数值。 此参数不能为 NULL。

[out] numModeInfoArrayElements:指向接收模式信息表中元素数的变量的指针。 然后,对 QueryDisplayConfig 函数的后续调用将使用 pNumModeInfoArrayElements 参数值。 此参数不能为 NULL。

GetDisplayConfigBufferSizes函数给定当前的显示路径配置和请求的标志,GetDisplayConfigBufferSizes 返回存储信息所需的路径和模式表的大小。GetDisplayConfigBufferSizes 可以返回的值略大于实际所需的值,因为它确定所有源路径和目标路径都有效;而驱动程序可能会对可能的组合施加一些限制。

由于 GetDisplayConfigBufferSizes 只能确定该时刻所需的数组大小,因此在调用 GetDisplayConfigBufferSizes 和 QueryDisplayConfig 之间,系统配置可能已更改,并且提供的数组大小不再足以存储新路径数据。

如果调用方知道必须启用其他源和目标,则调用方可以分配比 GetDisplayConfigBufferSizes 返回的更大的模式信息数组,以便它有空间在调用 QueryDisplayConfig 之后和调用 SetDisplayConfig 之前添加其他源和目标模式。

GetDisplayConfigBufferSizes 方案

在调用 QueryDisplayConfig 之前,始终调用 GetDisplayConfigBufferSizes。

LONG QueryDisplayConfig([in]            UINT32                    flags,[in, out]       UINT32                    *numPathArrayElements,[out]           DISPLAYCONFIG_PATH_INFO   *pathArray,[in, out]       UINT32                    *numModeInfoArrayElements,[out]           DISPLAYCONFIG_MODE_INFO   *modeInfoArray,[out, optional] DISPLAYCONFIG_TOPOLOGY_ID *currentTopologyId
);

由于 GetDisplayConfigBufferSizes 函数只能在特定时刻确定所需的数组大小,因此在调用 GetDisplayConfigBufferSizes 和 QueryDisplayConfig 之间,系统配置可能会更改,并且提供的数组大小将不再足以存储新路径数据。 在这种情况下, QueryDisplayConfig 失败并ERROR_INSUFFICIENT_BUFFER,调用方应再次调用 GetDisplayConfigBufferSizes 以获取新的数组大小。 然后,调用方应分配正确的内存量。

QueryDisplayConfig 返回 pPathInfoArray 参数指定的路径数组中的路径,以及 pModeInfoArray 参数指定的模式数组中的源和目标模式。 QueryDisplayConfig 始终按路径优先级顺序返回路径。 如果在 Flags 参数中设置了QDC_ALL_PATHS, QueryDisplayConfig 将返回活动路径之后的所有非活动路径。

完整路径、源模式和目标模式信息适用于所有活动路径。 源和目标的DISPLAYCONFIG_PATH_SOURCE_INFO和DISPLAYCONFIG_PATH_TARGET_INFO结构中的 ModeInfoIdx 成员是为这些活动路径设置的。 对于非活动路径,返回的源和目标模式信息不可用;因此,路径结构中的目标信息设置为默认值,并且源和目标模式索引被标记为无效。 对于数据库查询,如果当前连接监视器具有条目, 则 QueryDisplayConfig 返回完整路径、源模式和目标模式信息 (与活动路径) 相同。 但是,如果数据库没有条目, QueryDisplayConfig 仅返回路径信息,默认目标详细信息 (与非活动路径) 相同。

调用方可以使用 DisplayConfigGetDeviceInfo 获取有关源或目标设备的其他信息,例如,监视器名称和监视器首选模式和源设备名称。

如果当前正在强制投影目标,则DISPLAYCONFIG_PATH_TARGET_INFO结构的 statusFlags 成员设置了DISPLAYCONFIG_TARGET_FORCED_XXX标志之一。

如果在 Flags 参数中设置了QDC_DATABASE_CURRENT标志, QueryDisplayConfig 将在 pCurrentTopologyId 参数指向的变量中返回活动数据库拓扑的拓扑标识符。 如果在 Flags 参数中设置了 QDC_ALL_PATHS 或 QDC_ONLY_ACTIVE_PATHS 标志,则必须将 pCurrentTopologyId 参数设置为 NULL;否则, QueryDisplayConfig 返回ERROR_INVALID_PARAMETER。

如果调用方调用 QueryDisplayConfig 并在 Flags 参数中设置了QDC_DATABASE_CURRENT标志, 则 QueryDisplayConfig 会将 在 DISPLAYCONFIG_VIDEO_SIGNAL_INFO 结构的 totalSize 成员中指定的 DISPLAYCONFIG_2DREGION 结构初始化为零,并且不会完成DISPLAYCONFIG_2DREGION。

Windows SDK 文档中介绍的 EnumDisplaySettings Win32 函数 (返回的 DEVMODE 结构) 包含与源模式和目标模式相关的信息。 但是, CCD API 显式分隔源和目标模式组件。

http://www.jsqmd.com/news/47051/

相关文章:

  • nju实验七 状态机及键盘输入
  • Gephi如何支持MySQL数据的复杂查询
  • Mozilla CI日志中暴露微软x-apikey的安全事件分析
  • Gephi怎样优化MySQL数据的展示效果
  • Gephi对MySQL数据的导入导出有何支持
  • 智能制造(MOM)-详细设计 - 智慧园区
  • nju实验六 移位寄存器及桶形移位器
  • P6727 [COCI 2015/2016 #5] OOP
  • 完整教程:政务系统信创改造中,金仓日志如何满足等保2.0三级审计要求
  • 基于 Erlang 的英文数字验证码识别系统设计与实现
  • 如何使用IDM嗅探视频并下载?
  • java数据结构--LinkedList与链表 - 教程
  • 洛谷 B4409:[GESP202509 一级] 商店折扣 ← 模拟算法
  • 深入解析:自动化文件管理:分类、重命名和备份
  • nju实验三 加法器与ALU
  • 信息论(八):吉布斯不等式的证明
  • macos: 景观类动态的壁纸和屏保保存在哪里
  • pyppeteer: 得到当前运行中的浏览器
  • 题解:AT_agc028_e [AGC028E] High Elements
  • 基于单片机的篮球比赛计时与比分控制系统设计 - 详解
  • CSP-J2025总结
  • nju实验二 译码器和编码器
  • 如何最低成本注册一个域名?
  • 第四十六篇
  • 2025年送礼水果排行榜权威推荐,拉吾尤摩赣南脐橙荣登榜首
  • AI救星!8个写毕业论文的实用AI工具大揭秘
  • 数据血缘图在数据错误追溯中的应用指南
  • Luogu P10778 BZOJ3569 DZY Loves Chinese II 题解 [ 紫 ] [ Xor Hashing ] [ 线性基 ] [ DFS 树 ]
  • CSS基础语法 - 指南
  • MineContext:我第一次感觉 AI 真正在“主动帮我管理生活”