使用 High-Level Monitor 配置函数

枚举物理监视器

有几个函数枚举显示设备,包括 EnumDisplayMonitorsMonitorFromWindow。 Windows GDI 文档中的 多个显示监视器主题下记录了这些函数。 这些函数返回 HMONITOR 句柄。 但是,尽管名称为 HMONITOR,但 HMONITOR 句柄可以与多个物理监视器相关联。 若要在监视器上配置设置,应用程序必须通过调用 GetPhysicalMonitorsFromHMONITOR 获取物理监视器的唯一句柄。

如果应用程序使用 Direct3D,可以通过调用 GetPhysicalMonitorsFromIDirect3DDevice9 从 Direct3D 设备获取监视器句柄。

支持的函数

监视器可能不支持所有监视器配置功能。 若要了解监视器支持哪些函数,请调用 GetMonitorCapabilities

连续监视器设置

连续监视设置可以是一些最小值和最大值之间的设置。 大多数高级监视器配置函数控制连续监视设置。 例如,亮度和对比度是连续设置。

连续监视器设置没有定义实际单位。 这些单位是任意的,可以因制造商而异。 例如,如果两个监视器具有相同的亮度值,则一个监视器看起来可能比另一个更亮。 通常,应用程序会向用户显示滑块控件或上下控件。 然后,用户可以调整设置,以提供最佳的主观质量。

监视状态的更改

监视器可能会出于各种原因更改状态,包括:

所有这些事件都可以更改监视器设置。 它们还可以更改设置的最小值和最大值。

监视器设置之间的依赖关系

更改色温可能会更改当前驱动器和增益设置,反之亦然。 这些是高级监视器配置函数中唯一的依赖项。 其他设置可能只能通过低级别监视器函数访问。 这些设置与高级设置之间可能存在依赖关系。 这些依赖项特定于供应商。 应用程序可以通过多种方式处理此问题:

  • 仅使用高级函数。
  • 调用低级别函数后,获取每个监视器设置的当前值。 遗憾的是,此方法可能很慢,因为获取每个设置大约需要 40 毫秒。
  • 仅将低级别函数用于你了解其行为的特定监视模型。

禁用的监视器设置

应用程序无法通过调用高级监视器函数来禁用任何监视器设置。 但是,如果应用程序使用低级别函数更改高级函数不支持的监视设置,则应用程序可能会意外禁用该设置。 此外,用户还可以使用前面板控件禁用设置。 这些行为特定于供应商。

如果禁用监视器设置,则任何设置或检索该设置的函数都将失败,并将最后错误代码设置为ERROR_DISABLED_MONITOR_SETTING。 发生这种情况时,应用程序可以执行以下操作之一:

  • 显示错误消息,并建议用户尝试使用前面板控件调整设置。
  • 调用 RestoreMonitorFactoryDefaults 函数。 如果监视器具有MC_RESTORE_FACTORY_DEFAULTS_ENABLES_MONITOR_SETTINGS功能标志,则此函数将启用高级监视器函数支持的所有监视器设置。 遗憾的是,函数还会将监视器设置重置为其出厂默认设置。

使用监视器配置