Я пытаюсь получить информацию о моих мониторах программно. Содержимое циклов сейчас не важно, они просто содержат операторы отладки, которые будут напечатаны, когда условие цикла будет выполнено. Прямо сейчас код внешнего цикла выполняется три раза, и к коду внутреннего цикла никогда не осуществляется доступ, что означает, что условие while (внутреннего) цикла никогда не выполняется, что означает, что вызов не выполняется.
Моя проблема здесь в том, что Windows API говорит об этой функции:
Чтобы получить информацию на мониторе, сначала вызовите EnumDisplayDevices с lpDevice>, установленным в NULL. Затем вызовите EnumDisplayDevices с lpDevice, установленным на DISPLAY_DEVICE.DeviceName>, из первого вызова EnumDisplayDevices и с iDevNum, установленным в ноль. Тогда> DISPLAY_DEVICE.DeviceString - это имя монитора.
... но даже после выполнения именно того, что он говорит, второй вызов EnumDisplayDevices всегда терпит неудачу? Любое понимание ???
Также я делаю это как приложение уровня обслуживания как для Windows XP, так и для Windows 7 и получаю те же результаты. Когда я пытаюсь распечатать dd.DeviceName, он дает мне адрес (например: 0x12cfa4), но это должно быть то, что функция ожидает при втором вызове, поскольку MSDN говорит, что просто передайте указатель устройства отображения и добавьте .DeviceName к it ...
Используются 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++;
}