我试图以编程方式在我的监视器上获取信息。循环的内容现在并不重要,它们只包含在满足循环条件时将打印的调试语句。现在,外部循环代码执行三次,而内部循环代码从未被访问,这意味着(内部)循环的while条件从不为真,这意味着调用失败。EnumDisplayDevices函数不适合我
我在这里的问题是,在Windows API称,关于此功能:
为了获得一个显示器上lpDevice,第一个电话EnumDisplayDevices>设置为NULL信息。然后调用EnumDisplayDevices并将lpDevice设置为DISPLAY_DEVICE.DeviceName>,从第一次调用EnumDisplayDevices并将iDevNum设置为零。然后> DISPLAY_DEVICE.DeviceString是监视器名称。
...但即使做完了它所说的,第二个EnumDisplayDevices调用总是失败?任何见识?
此外,我正在做这个作为服务级别的应用程序在Windows XP和Windows 7上获得相同的结果。当我尝试打印出dd.DeviceName时,它给了我一个地址(例如:0x12cfa4),但是这必须是函数在第二次调用时所期待的,因为MSDN只是传递显示设备指针并将.DeviceName附加到它...
C++(使用Qt),使用Windows API/MSDN调用。
DISPLAY_DEVICE dd;
dd.cb = sizeof(DISPLAY_DEVICE);
DWORD deviceNum = 0;
while(EnumDisplayDevices(NULL, deviceNum, &dd, 0)){
qWarning() << "We've entered the outer loop.";
while(EnumDisplayDevices(dd.DeviceName, 0, &dd, 0)){
qWarning() << "We've entered the inner loop.";
}
deviceNum++;
}
我刚刚写完很多相同的东西。别名是问题。 – arx 2012-03-01 22:06:43
不知道这是自发布代码以来发生了什么变化,但我发现在MSVC2015中,我必须使用%S而不是%s,因为DeviceName,DeviceString等是WCHAR数组,我猜想包含/ 0数据在每秒字符中。 – scone 2016-02-09 00:24:17