Аргумент командной строки для получения разрешения монитора возвращает только один монитор - PullRequest
0 голосов
/ 08 мая 2018

У меня ноутбук с Windows 7, подключенный к двум дополнительным мониторам. Чтобы расширить панель задач на эти дополнительные мониторы (в отличие от Win10, у Win7 нет этой способности изначально), я использую программу под названием DualMonitor.exe.

Моя проблема в том, что когда я отключаю ноутбук от этих дополнительных мониторов, программы, управляемые DualMonitor, становятся скрытыми. Чтобы исправить это, я сделал простой командный файл для перезапуска explorer и DualMonitor.

@echo off

taskkill /f /im dualmonitor.exe
ping localhost -n 1 > nul

taskkill /f /im explorer.exe
ping localhost -n 3 > nul

echo.
echo restarting explorer

start explorer.exe
ping localhost -n 6 > nul

echo restarting dual monitor
start "" "C:\Users\X\AppData\Local\Dual Monitor\DualMonitor.exe"

Пакет выше работает нормально, но я хотел отрегулировать его так, чтобы он открывал ТОЛЬКО DualMonitor в случае подключения дополнительных мониторов. Я провел небольшое исследование и обнаружил, что эти команды можно изменить, чтобы подсчитал количество дополнительных мониторов, подключенных к ноутбуку :

wmic desktopmonitor  get screenwidth, screenheight

wmic path Win32_VideoController  get CurrentHorizontalResolution, CurrentVerticalResolution

... но для меня оба они возвращают только разрешение для монитора ноутбука , несмотря на то, что он подключен к двум дополнительным мониторам. У меня нет прав администратора на эту машину, поэтому я не могу использовать dxdiag в своем решении.


Конечный результат

@echo off

taskkill /f /im dualmonitor.exe
ping localhost -n 1 > nul

taskkill /f /im explorer.exe
ping localhost -n 3 > nul

echo.
echo restarting explorer

start explorer.exe
ping localhost -n 3 > nul

for /F %%M in ('
    wmic path Win32_PnPEntity where "Service='monitor' and Status='OK'" get DeviceID /VALUE ^
        ^| find /C "="
') do set count=%%M

if %count% GTR 1 (
    echo restarting dual monitor.
    start "" "C:\Users\X\AppData\Local\Dual Monitor\DualMonitor.exe"
    ping localhost -n 4 > nul
)

echo.
echo all done.
ping localhost -n 2 > nul

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Для определения количества подключенных мониторов вы можете использовать следующий код:

for /F %%M in ('
    wmic path Win32_PnPEntity where "Service='monitor' and Status='OK'" get DeviceID /VALUE ^
        ^| find /C "="
') do echo There are %%M monitors.

См. Статью Класс Win32_PnPEntity для класса WMI Win32_PnPEntity.

0 голосов
/ 08 мая 2018

используйте wmic, как вы, но выберите только одно свойство и сосчитайте вхождения:

for /f %%a in ('wmic desktopmonitor get DeviceID /value ^| find /c "="') do set "monitors=%%a"
echo there are %monitors% monitors.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...