目前我有一个函数,我希望它返回活动监视器的数量(通过使用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
中设置了给定的二进制标志。