检查枚举显示设备 dwFlags

Checking EnumDisplayDevices dwFlags

本文关键字:dwFlags 显示设备 枚举 检查      更新时间:2023-10-16

目前我有一个函数,我希望它返回活动监视器的数量(通过使用EnumDisplayDevices)。

...
    DISPLAY_DEVICE dd;
    dd.cb = sizeof(DISPLAY_DEVICE);
    while (EnumDisplayDevices(NULL, numberofDeviceAdapters, &dd, EDD_GET_DEVICE_INTERFACE_NAME))
    {
        if (dd.StateFlags == DISPLAY_DEVICE_ACTIVE)
        {
            numberOfActiveMonitors++;
        }
        numberofDeviceAdapters++;
    }
    return numberOfActiveMonitors;

活动监视器的数量永远不会增加,如何正确检查DISPLAY_DEVICE的州旗?

如果您阅读DISPLAY_DEVICE数据结构的 MSDN 文档,您会注意到:

州旗
设备状态标志。它可以是以下各项的任何合理组合。
[...]

因此,您应该使用二进制&(按位 AND)运算符来检查是否在上述数据结构的StateFlags数据成员中设置了 desidered 标志(在您的情况下为 DISPLAY_DEVICE_ACTIVE)。

例如:

// Your code: 
//   if (dd.StateFlags == DISPLAY_DEVICE_ACTIVE)
//
// Change to (use binary AND & operator):
if (dd.StateFlags & DISPLAY_DEVICE_ACTIVE)
{
    ...
}

这是 Win32/C++ 编程中非常常见的模式,用于检查是否在包含多个标志的DWORD中设置了给定的二进制标志。