📜  DISPLAYCONFIG 获取当前显示模式 (1)

📅  最后修改于: 2023-12-03 14:40:45.425000             🧑  作者: Mango

使用DISPLAYCONFIG获取当前显示模式

DISPLAYCONFIG是Windows API的一部分,用于管理和配置当前连接到系统的显示器。它包括获取和更改显示器属性、显示模式和显示方案等功能。本文将介绍如何使用DISPLAYCONFIG获取当前的显示模式。

步骤一:包含头文件

首先,我们需要包含DISPLAYCONFIG的头文件,以便访问其函数和常量定义。头文件名称为“winuser.h”,在我们的源代码文件中加入以下代码即可:

#include <winuser.h>
步骤二:定义DISPLAYCONFIG结构体

定义一个DISPLAYCONFIG结构体,用于描述与显示器相关的信息。该结构体包含在WinUser.h中定义的DISPLAYCONFIG_PATH_INFO和DISPLAYCONFIG_MODE_INFO结构体的数组,用于存储每个路径和模式的详细信息。代码片段如下:

DISPLAYCONFIG_PATH_INFO pathInfoArray[1];
DISPLAYCONFIG_MODE_INFO modeInfoArray[1];
ZeroMemory(pathInfoArray, sizeof(pathInfoArray));
ZeroMemory(modeInfoArray, sizeof(modeInfoArray));
pathInfoArray[0].flags = DISPLAYCONFIG_PATH_ACTIVE;
modeInfoArray[0].flags = DISPLAYCONFIG_MODE_INFO_TYPE_TARGET;
步骤三:调用DISPLAYCONFIG函数

最后,我们使用DISPLAYCONFIG函数获取当前的显示模式。该函数用于检索当前针对单个显示路径的所有显示器、源和模式的状态信息。我们将使用DISPLAYCONFIG_GET_ADVANCED_COLOR_INFO常量来检索显示模式的详细信息。代码如下:

DISPLAYCONFIG_TOPOLOGY_ID topoId = 0;
DISPLAYCONFIG_DEVICE_INFO deviceInfo;
deviceInfo.size = sizeof(deviceInfo);
deviceInfo.adapterId.LowPart = pathInfoArray[0].sourceInfo.adapterId;
deviceInfo.adapterId.HighPart = 0;
deviceInfo.id = pathInfoArray[0].sourceInfo.id;
deviceInfo.type = DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME;
HRESULT hr = DisplayConfigGetDeviceInfo(&deviceInfo);
if (hr == ERROR_SUCCESS)
{
   DISPLAYCONFIG_TARGET_DEVICE_NAME deviceName;
   ZeroMemory(&deviceName, sizeof(deviceName));
   deviceName.header.size = sizeof(deviceName);
   deviceName.header.adapterId = deviceInfo.adapterId;
   deviceName.header.id = deviceInfo.id;
   deviceName.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME;
   hr = DisplayConfigGetDeviceInfo(&deviceName.header);
   if (hr == ERROR_SUCCESS && deviceName.monitorFriendlyDeviceName[0])
   {
      DISPLAYCONFIG_TARGET_DEVICE_TYPE deviceType = deviceName.header.targetDeviceType;
      DISPLAYCONFIG_GET_ADVANCED_COLOR_INFO colorInfo;
      colorInfo.header.type = DISPLAYCONFIG_DEVICE_INFO_GET_ADVANCED_COLOR_INFO;
      colorInfo.header.size = sizeof(colorInfo);
      colorInfo.header.adapterId = deviceName.header.adapterId;
      colorInfo.header.id = deviceName.header.id;
      hr = DisplayConfigGetDeviceInfo(&colorInfo.header);
      if (hr == ERROR_SUCCESS)
      {
         printf("Display mode: %d x %d, Color Bit Depth: %d\n", modeInfoArray[0].sourceMode.width, modeInfoArray[0].sourceMode.height, colorInfo.value.colorDepth);
      }
   }
}
总结

通过以上步骤,我们可以使用DISPLAYCONFIG函数获取当前的显示模式和颜色位深度,以便在程序中对显示器进行配置和控制。此外,DISPLAYCONFIG还有许多其他的功能和用法,读者可自行查阅相关文档和参考资料,深入学习和使用该API。