目前我有一个功能,我想让它返回活动监视器的数量(使用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?
答案 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)
{
...
}
中设置了给定的二进制标志。