获取监视器解析的命令行参数仅返回一个监视器

时间:2018-05-08 17:07:39

标签: batch-file cmd screen-resolution

我有一台Windows 7笔记本电脑连接到两台额外的显示器。为了将任务栏扩展到这些额外的监视器(Win7本身不具备此功能,与Win10不同),我使用名为DualMonitor.exe的程序。

我的问题是,当我从这些额外的显示器断开笔记本电脑时,由DualMonitor管理的程序将被隐藏。为了解决这个问题,我制作了一个简单的批处理文件来重新启动explorerDualMonitor

@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 :(得分:1)

要确定连接的监视器数量,可以使用以下代码:

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 class了解WMI类Win32_PnPEntity

答案 1 :(得分:0)

像你一样使用predict_proba,但只选择一个属性并计算出现的次数:

wmic