Вопрос или проблема
У меня есть ноутбук с USB-VGA адаптером, который позволяет мне добавить третий монитор к моему ноутбуку (второй монитор использует встроенный слот).
На Windows Vista это работало отлично – можно было зайти в настройки дисплея Windows, и Windows обнаруживала третий монитор, позволяя перемещать его. На Windows 7 третий монитор буквально отсутствует в настройках дисплея Windows. Драйвер позволяет отображать третий монитор, но вы не можете переместить его. Настройки дисплея смещены относительно других двух (если перетаскивать окна на него, они оказываются внизу, когда должны быть выровнены).
Я позвонил в техподдержку, и они сказали, что пока нет драйверов с этой функциональностью для Windows 7. Но у меня есть предположение. Положение монитора все еще в некоторой степени похоже на то, что было на Vista, он просто смещен на примерно 500 пикселей. Я думаю, что существует либо ключ реестра, либо файл драйвера, который указывает этому монитору, где находиться. Если я смог бы просто изменить число и переместить его на 500 пикселей вверх, это решило бы проблему, и мне не пришлось бы ждать 6 месяцев, пока компания выпустит новый драйвер.
Есть идеи?
Посмотрите различные ключи и папки в
HKEY_CURRENT_CONFIG\System\CurrentControlSet\Control\Video
Конкретно в самых глубоких подкаталогах MonXXXXXXX
должны быть значения Attach.RelativeX
и Attach.RelativeY
, которые указывают местоположение мониторов относительно пикселя 0,0.
Странно, но когда я проверяю машину с Windows 7 здесь с двумя мониторами, она, кажется, не показывает второй монитор. Но моя машина с XP показывает все три, так что ваш опыт может варьироваться.
Во всяком случае, это место, чтобы начать!
Для тех, кто ищет ключ в Windows Vista до Windows 11, он находится в одной из папок по адресу:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration\
В этом пути есть подключи для каждого монитора, сочетания мониторов и разрешения мониторов. Подключи названы исходя из аппаратного идентификатора каждого монитора (видно на вкладке “Сведения” в диспетчере устройств) плюс GUID. Каждый из этих подключей будет иметь дополнительный номерной подключ для каждого монитора в этой комбинации конфигурации.
В каждом номерном подключе найдите Position.cx
и Position.cy
. Позиция измеряется в пикселях от левого верхнего края, с 0,0
, представляющим верхний левый угол левого монитора. Значение по умолчанию для REG_DWORD – шестнадцатеричное, но вы также можете ввести десятичное число, выбрав его в поле “Основание”. Вы также можете использовать приложение “Калькулятор” в режиме “Программист” для преобразования между десятичными и шестнадцатеричными значениями.
Если вы использовали монитор при двух разных разрешениях, вы можете увидеть несколько подключей с одинаковыми аппаратными идентификаторами. DWORD’ы PrimSurfSize.cx
и PrimSurfSize.cy
представляют разрешение дисплея, и вы можете использовать их для определения правильной конфигурации.
Вычтите количество, которое вы хотите сделать отрицательным, из 4294967296, чтобы получить число, необходимое для реестра. Например, для 4294967296 – 250 = 4294967046.
Для тех, кто разбирается…
Это раздражение обусловлено тем фактом, что редактор реестра не интерпретирует 32 бита как что-то, кроме как беззнаковое десятичное целое число или шестнадцатеричное представление бинарных данных. Однако, когда Windows извлекает эти бинарные данные при позиционировании ваших дисплеев, она интерпретирует их как знаковое целое число. Для того чтобы Windows узнала, что 32-битное знаковое целое число является отрицательным, последний бит становится 1 (крайний левый), а остальные биты инвертируются. Так, -1 будет иметь бинарное значение 11111111 11111111 11111111 11111111 (hex: FF FF FF FF). Если вы переведете его в беззнаковое десятичное целое число (как делает редактор реестра), вы получите 4,294,967,295. Таким образом, для наших целей 0 равняется 4,294,967,296, к которому можно просто добавить ваше отрицательное число, чтобы получить беззнаковое десятичное целое число, которое редактор реестра сохранит в бинарной форме и которое система позже интерпретирует как отрицательно-знаковое целое число.
Мне хотелось бы знать, почему это работает, но я знаю, что это так:
Чтобы переместить монитор ВВЕРХ (поскольку отрицательные значения нельзя использовать в реестре), вам нужно использовать значения для attach.relativeY вроде этого: 4294967040
Благодарность этому форуму за помощь в выяснении этой части – http://www.ureader.com/msg/164488.aspx
Если вы уменьшаете последние 4 цифры этого числа, монитор идет вниз и наоборот. Это также работает для attach.relativeX. Немного настройки, и все возвращается в норму.
Кому нужны функциональные драйверы, пфф
Быстрое обновление этой старой темы для Windows 10.
Ключи Attach.RelativeX и Attach.RelativeY находятся здесь:
Компьютер\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\UnitedVideo\CONTROL\VIDEO\
Ниже будут ключи для машины и под-ключи >00, >01 и т.д., для каждого дисплея.
Те же правила по отрицательному позиционированию все еще применяются.
Я обнаружил, что для активации без выхода можно выполнить
DisplaySwitch.exe /extend
для мгновенной активации обновленного профиля в реестре.
Так что, для однокликового автоматизированного переключения профилей, вы можете запаковать свои настройки реестра перед вызовом вышеуказанной команды.
Для использования подробного сценария, посмотрите эту инструкцию для создания горячих клавиш или ярлыков для расширенных дисплеев
Вместо вычисления отрицательных значений может быть проще понять, если вы сохраните все значения положительными, создавая логический 0,0 в физическом верхнем левом углу виртуального квадрата, который вы бы нарисовали, если бы пытались окружить все мониторы. Думайте так, когда вы перемещаете монитор вверх и влево, что вы на самом деле отталкиваете другие вправо и вниз.
Например, у меня был монитор 1280×1024 и 1920×1200, при этом первый, меньший, по умолчанию находился справа от второго, а не снизу-слева от первого, где он физически расположен (слева) и совмещен (нижний край находится на одной высоте, вверх, конечно же, ниже, потому что он не такой высокий).
Так, для начала второй монитор 1920×1080 был на позиции 0,0, а первый на 1920,0. Вместо попытки рассчитать отрицательное значение -(1920 + 1280), (1200 – 1024) для первого монитора я просто установил первый монитор со всеми положительными значениями 0,(1200 -1024) и второй на 1280, 0.
Выход из Windows, а затем вход применили эти настройки для меня. Также полезно знать, что это работает на Windows Hyper-V Server (я только что сделал это на 2012 R2, что значит, что эти настройки все еще работают в Windows 8 и 8.1). Это действительно полезно для людей, заблокированных от настроек разрешения экрана, но стремящихся к “bare metal” стилю хоста ПК (вам почти никогда не нужно обновлять или перезагружаться) и работающих только с виртуальными машинами внутри через Remote Desktop (скопируйте это с другого компьютера).
Спасибо techie007 за оригинальный ответ, это был ключ к работе со всем этим. Если вы находите этот вариант полезным, не забудьте “поднять” его ответ и вопрос тоже.
Для ответа от Шона, чтобы найти текущую конфигурацию:
У каждой конфигурации есть значение Timestamp
, так что посмотрите, какое из этих значений самое высокое
После того как вы найдете конфигурацию с новейшим временным штемпелем, если вы перестраиваете мониторы в настройках дисплея Windows, вы также должны увидеть изменение временного штемпеля.
Также, это, кажется, формат для названия каждой конфигурации:
-
*
означает, что мониторы дублируются -
+
расширенные мониторы -
^
каждая запись имеет это в конце, а затем следуют некоторые цифры, которые, я думаю, являются каким-то идентификатором конфигурации. Так что эти цифры не являются идентификатором монитора.
Пример
name1*name2+name3^configurationID
= 1 и 2 дублируются, а 3 расширен
name1+name2+name3^configurationID
= все 3 монитора расширены
Ответ или решение
Определение положения мониторов в многомониторной среде Windows может быть сложной задачей, особенно если вы используете различные адаптеры, такие как USB-VGA. Когда дело касается изменения конфигурации мониторов на основе их положения, ключевую роль играют определенные разделы реестра Windows и драйверы. В данном контексте мы обратим особое внимание на настройки реестра, которые управляют настройкой и размещением мониторов.
Теория
При подключении нескольких мониторов к Windows-системе, операционная система использует конфигурационные данные для правильного отображения и размещения всех подключенных дисплеев. Эти данные хранятся в системном реестре Windows. Реестр для Windows — это самая крупная иконическая база данных, которая содержит все настройки и конфигурации, необходимые для работы операционной системы и аппаратного обеспечения.
Ключевые разделы реестра:
-
HKEY_CURRENT_CONFIG\System\CurrentControlSet\Control\Video: Этот раздел содержит информацию о видеоустройствах, которые использовались в системе, включая историю их конфигураций.
-
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration: Здесь располагаются ключи, которые относятся к различным конфигурациям дисплеев, включая настройки размещения и разрешения.
Эти разделы включают отдельные подветви для каждого из мониторов или конфигураций, которые были ранее использованы. В частности, ключи Attach.RelativeX
и Attach.RelativeY
определяют расположение мониторов относительно начальной точки (0,0). Значения этих ключей представляют собой пиксельные данные, и их изменение позволяет перемещать мониторы в пространстве.
Пример
Допустим, у вас в конфигурации были две группы дисплеев: основной дисплей с расширением 1920×1080 и вспомогательный монитор с 1280×1024, который физически располагается слева. Представьте, что при предыдущем изменении в Windows 7, все работало корректно, но после обновления до Windows 10 или 11, настройки сбились.
Вам нужно вручную скорректировать размещение. Для этого следует:
- Открыть редактор реестра:
regedit
. - Перейти в указанный выше раздел
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration
. - Найти соответствующий подраздел с актуальными для вашего случая данными. Вы можете ориентироваться на время последнего измененного времени (Timestamp), чтобы определить актуальные конфигурации.
- Изменить значения
Position.cx
иPosition.cy
для корректировки положения дисплеев относительно друг друга.
Применение
Когда речь идет о практической реализации и настройке, есть несколько шагов, которые важно учитывать:
-
Резервное копирование реестра: Перед внесением изменений рекомендуется создать резервную копию текущих настроек реестра. Это позволит восстановить исходные состояния в случае ошибки.
-
Ручная корректировка значений: Если необходимо сдвинуть монитор вверх или влево, значения могут быть отрицательными. Однако особенность Windows заключается в том, что она требует представления этих значений в формате беззнакового целого числа для их корректного сохранения. Так, чтобы переместить монитор вверх на 250 пикселей, следует внести в реестр значение 4294967046, что эквивалентно отрицательному -250.
-
Активация изменений: Для того чтобы изменения вступили в силу немедленно, можно использовать команду
DisplaySwitch.exe /extend
для быстрого применения обновленных конфигураций без необходимости перезагрузки системы.
В заключение, правильная настройка размещения мониторов в многомониторной среде требует внимательного подхода к редактированию реестра и понимания того, как эти изменения влияют на общую конфигурацию вашего рабочего пространства. Это также помогает лучше понять, как Windows обрабатывает аппаратные настройки и приближает к решению, которое может сократить необходимость в ожидании обновленных драйверов, давая вам более непосредственный контроль над вашим оборудованием.