SetConsoleWindowInfo на нескольких мониторах - PullRequest
10 голосов
/ 22 мая 2011

ОС: Windows 7, 64-битная

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

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

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

1 Ответ

2 голосов
/ 15 июня 2011

Может помочь следующее:

#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;
}
...