如何检测批处理文件中的多个监视器

时间:2016-01-20 02:52:44

标签: batch-file

我最近开始潜入编写批处理文件,我有一个问题。我试图创建一个文件来检查我的辅助监视器是否已连接,以及是否将主显示器切换到辅助屏幕。 (是的我知道windows + P的快捷方式)......

到目前为止,我已经发现" DisplaySwitch.exe / external"将默认显示设置为辅助监视器,但我无法找到如何检测显示器是否在那里。

-Cheers,Luke

4 个答案:

答案 0 :(得分:1)

一种可能的方法是使用dxdiag虽然它不是最快的方式:

@echo off

del ~.txt /q /f >nul 2>nul
dxdiag /t ~
w32tm /stripchart /computer:localhost /period:1 /dataonly /samples:3  >nul 2>&1
setlocal enableDelayedExpansion
set currmon=1 
for /f "tokens=2 delims=:" %%a in ('find "Current Mode:" ~.txt') do (
    echo Monitor !currmon! : %%a
    set /a currmon=currmon+1

)
endlocal
del ~.txt /q /f >nul 2>nul

这将打印所有监视器的分辨率。

<强>更新

dxdiag打印有关所有监视器的信息,以便您可以检查是否有多个监视器:

@echo off
del ~.txt /q /f >nul 2>nul
start "" /w dxdiag /t ~

for /f "tokens=1* delims=:" %%a in ('find /c "Current Mode:" "~.txt"') do (
    set /a "number_of_monitors=%%b"
    rem echo #%%b#
)
rem exit /b 0
echo %number_of_monitors%


rem :---- if it needed -----:

if defined number_of_monitors ( if %number_of_monitors% GTR 1 ( echo second monitor connected ) else (echo only one monitor connected ))
del ~.txt /q /f >nul 2>nul

答案 1 :(得分:1)

@ npocmaka的回答并不适合我,但他的代码的这种变化(Windows 10):

rem @echo off
del %TEMP%\dxdiag.txt /q /f >nul 2>nul
start "" /w dxdiag -64bit -t %TEMP%\dxdiag.txt

for /f "tokens=3" %%f in ('find /c"Monitor Name:" %TEMP%\dxdiag.txt') do set MONITOR_COUNT=%%f

if defined MONITOR_COUNT ( if %MONITOR_COUNT% GTR 1 ( echo second monitor connected ) else (echo only one monitor connected ))
del %TEMP%\monitors.txt /q /f >nul 2>nul

答案 2 :(得分:0)

在Windows 10中,可能仅是调用:

 wmic desktopmonitor get DeviceID     

输出:

DeviceID
DesktopMonitor1
DesktopMonitor2

有关使用监控的更多详细信息:

 wmic desktopmonitor get 

答案 3 :(得分:0)

SET monitors=monitors.txt
SET nMons=0
MultiMonitorTool.exe /scomma "%monitors%"
FOR /F "skip=1 tokens=9 delims=," %%a IN (%monitors%) DO IF %%a GTR 0 SET /A nMons += 1
echo Number of monitors: %nMons%

MultiMonitorTool