检查EnumDisplayDevices dwFlags

时间:2014-11-16 13:01:00

标签: c++ windows

目前我有一个功能,我想让它返回活动监视器的数量(使用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;

numberOfActiveMonitors永远不会增加,如何正确检查DISPLAY_DEVICE的StateFlags?

1 个答案:

答案 0 :(得分:2)

如果您阅读DISPLAY_DEVICE data structure的MSDN文档,请注意:

  

<强> StateFlags
  设备状态标志。它可以是以下任何合理的组合   [...]

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

e.g:

StateFlags

这是Win32 / C ++编程中一种非常常见的模式,用于检查是否在包含多个标志的// Your code: // if (dd.StateFlags == DISPLAY_DEVICE_ACTIVE) // // Change to (use binary AND & operator): if (dd.StateFlags & DISPLAY_DEVICE_ACTIVE) { ... } 中设置了给定的二进制标志。