SetConsoleWindowInfo на нескольких мониторах

ОС: Windows 7 64bit

Два монитора, один в портрете, один в пейзаже. Пейзаж один является основным.

Я пытаюсь изменить размер консоли с помощью SetConsoleWindowInfo, но если я попытаюсь изменить ее размер до размера, который бы поместился на портретном мониторе, но не в ландшафтном (основном) мониторе, функция вернется как неудачная, хотя консоль на самом деле находится на портретном мониторе.

Я знаю, что Windows использует размер экрана в качестве верхнего предела размеров окна консоли. Тем не менее, он использует только размер экрана основного монитора. Есть ли способ указать, какие размеры экрана использовать или даже лучше, чтобы он использовал объединенную область рабочего стола как максимальные размеры?

Ответ 1

Следующие действия могут помочь:

#include "windows.h"
#include <conio.h>

int _tmain(int argc, _TCHAR* argv[])
{
    bool hasSecondary = false;
    POINT secondaryPosition;
    POINT secondarySize;
    POINT primarySize;
    {
        DISPLAY_DEVICE displayDevice;
        displayDevice.cb = sizeof(DISPLAY_DEVICE);

        DEVMODE deviceMode;
        ZeroMemory(&deviceMode, sizeof(DEVMODE));
        deviceMode.dmSize = sizeof(DEVMODE);

        int i = 0;
        while(::EnumDisplayDevices(NULL, i++, &displayDevice, 0))
        {
            if(displayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP &&
                !(displayDevice.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER))
            {
                if(EnumDisplaySettingsEx(displayDevice.DeviceName, ENUM_CURRENT_SETTINGS, &deviceMode, 0) == FALSE)
                    EnumDisplaySettingsEx(displayDevice.DeviceName, ENUM_REGISTRY_SETTINGS, &deviceMode, 0);
                if(deviceMode.dmPosition.x != 0 || deviceMode.dmPosition.y != 0)
                {
                    hasSecondary = true;
                    secondaryPosition.x = deviceMode.dmPosition.x;
                    secondaryPosition.y = deviceMode.dmPosition.y;
                    secondarySize.x = deviceMode.dmPelsWidth;
                    secondarySize.y = deviceMode.dmPelsHeight;
                }
                else
                {
                    primarySize.x = deviceMode.dmPelsWidth;
                    primarySize.y = deviceMode.dmPelsHeight;
                }
            }
        }
    }

    MoveWindow(GetConsoleWindow(),
        secondaryPosition.x, secondaryPosition.y,
        secondarySize.x, secondarySize.y,
        TRUE);

    _getch();

    return 0;
}