У меня не работает функция EnumDisplayDevices

Я пытаюсь получить информацию о моих мониторах программно. Содержимое циклов сейчас не важно, они просто содержат операторы отладки, которые будут напечатаны, когда условие цикла будет выполнено. Прямо сейчас код внешнего цикла выполняется три раза, и к коду внутреннего цикла никогда не осуществляется доступ, что означает, что условие 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++;
    }
5
задан LeapDayWilliam 1 March 2012 в 21:54
поделиться