|
VB skript pro ovládání a vyčítání stavu projektoru Panasonic PT-AE4000E a PT-AE4000U je podle všeho již hotov (nějak jsem neměl potřebu v něm cokoli měnit už týden), tož je čas předhodit nějaké ty příklady praktického užití.
Zapnout a vypnout projektor tímto skriptem dokáže snad i to největší trdlo, stačí vytvořit zástupce tohoto skriptu a pak připsat do příkazového řádku uvnitř tohoto LNK souboru /C:PON případně ještě /V:1 (ev. /C:POF). Nicméně přepnout poměr stran projektoru tak, aby byl zdrojový obraz oříznutý (ZOOM) a "letterboxed source" se promítal jako plnohodnotný formát 16:9 a naopak, aby se ZOOM vypnul a nastavil se poměr stran na přirozených 16:9, to už je trochu složitější.
Dávkový soubor Letterboxed_source.BAT:
@echo off
set WhereAmI=%~dp0
set WhereAmI=%WhereAmI:~,-1%
set ScriptName=%WhereAmI%\projector_serial_terminal_control.vbs
set Engine=%SystemRoot%\SysWOW64\cscript.exe
if not exist "%Engine%" set Engine=%SystemRoot%\system32\cscript.exe
setlocal
set Command=QPW
set ResponseFile=%TEMP%\projector_state.txt
"%Engine%" //NoLogo "%ScriptName%" /P:1 /B:9600,N,8,1 /L:"%ResponseFile%" /M:R /A:Y /U:N /V:1 /X:N /C:%Command%
if %ErrorLevel% neq 0 goto error1
if not exist %ResponseFile% goto error1
set ProjectorState=
FOR /F %%I IN (%ResponseFile%) DO set ProjectorState=%%I
del %ResponseFile%
set Question=
set CommonPart=nastavit pro zobrazování širokoúhlého obrazu, který je zkurvený převodem do formátu Non-Anamorphic (Letterboxed)?
if "%ProjectorState%" == "000" set Question=Projektor je vypnutý, mám ho zapnout a %CommonPart%
if "%ProjectorState%" == "001" set Question=Mám projektor %CommonPart%
set CommonPart=
if "%Question%" == "" goto error2
%WhereAmI%\MsgBoxEx.EXE 4 %Question%
if %ErrorLevel% equ 7 goto ne
if %ErrorLevel% equ 6 goto ano
goto error3
:ano
if "%ProjectorState%" == "001" goto projector_on
endlocal
setlocal
set Command=PON
set ResponseFile=%TEMP%\projector_response.txt
"%Engine%" //NoLogo "%ScriptName%" /P:1 /B:9600,N,8,1 /L:"%ResponseFile%" /M:R /A:Y /U:N /V:1 /X:N /C:%Command%
if %ErrorLevel% neq 0 goto error4
if not exist %ResponseFile% goto error4
echo Projektor se zapíná... prodleva 30 vteřin
sleep 30
del %ResponseFile%
endlocal
setlocal
set Command=QPW
set ResponseFile=%TEMP%\projector_state.txt
"%Engine%" //NoLogo "%ScriptName%" /P:1 /B:9600,N,8,1 /L:"%ResponseFile%" /M:R /A:Y /U:N /V:1 /X:N /C:%Command%
if %ErrorLevel% neq 0 goto error1
if not exist %ResponseFile% goto error1
set ProjectorState=
FOR /F %%I IN (%ResponseFile%) DO set ProjectorState=%%I
del %ResponseFile%
if "%ProjectorState%" == "000" goto error5
if "%ProjectorState%" == "001" goto projector_on
goto error1
:projector_on
endlocal
setlocal
echo Projektor je zapnutý, posílám povely...
echo Nastavení režimu CINEMA1
set Command=VPM:CN1
set ResponseFile=%TEMP%\projector_response.txt
"%Engine%" //NoLogo "%ScriptName%" /P:1 /B:9600,N,8,1 /L:"%ResponseFile%" /M:R /A:Y /U:N /V:1 /X:N /C:%Command%
if %ErrorLevel% neq 0 goto error6
if not exist %ResponseFile% goto error6
del %ResponseFile%
rem 1 = s16:9 , 2 = H-FIT , 3 = V-FIT , 4 = ZOOM , 5 = 4:3 , 6 = 16:9
set /A LOOP=4
if exist %WhereAmI%\ResetZoom.bat call %WhereAmI%\ResetZoom.bat
:loop
if %LOOP% EQU 0 goto endloop
sleep 1
if %LOOP% EQU 4 echo Zoom: s16:9
if %LOOP% EQU 3 echo Zoom: H-FIT
if %LOOP% EQU 2 echo Zoom: V-FIT
if %LOOP% EQU 1 echo Zoom: ZOOM
if %LOOP% EQU 6 echo Zoom: 4:3
if %LOOP% EQU 5 echo Zoom: 16:9
set Command=VS1
"%Engine%" //NoLogo "%ScriptName%" /P:1 /B:9600,N,8,1 /L:"%ResponseFile%" /M:R /A:Y /U:N /V:1 /X:N /C:%Command%
if %ErrorLevel% neq 0 goto error6
if not exist %ResponseFile% goto error6
set /A LOOP=%LOOP% - 1
goto loop
:endloop
del %ResponseFile%
echo set /A LOOP=2 + %%LOOP%% >%WhereAmI%\ResetZoom.bat
echo Hotovo...
sleep 2
goto clear
:ne
echo Operace zrušena uživatelem...
sleep 2
:clear
endlocal
set Engine=
set ScriptName=
set WhereAmI=
set ResponseFile=
goto :EOF
:error1
echo Nastala chyba při zjišťování stavu zapnutí/vypnutí projektoru!
pause
goto clear
:error2
echo Nastala chyba při vyhodnocování odpovědi z projektoru!
pause
goto clear
:error3
echo Nastala chyba při vyhodnocování odpovědi z MsgBoxEx.EXE!
pause
goto clear
:error4
echo Nastala chyba při zapínání projektoru!
pause
goto clear
:error5
echo Nastala chyba, nepodařilo se zapnout projektor!
pause
goto clear
:error6
echo Nastala chyba při zasílání povelu do projektoru!
pause
goto clear
K tomu jen pár poznámek: v případě potřeby dávka nabídne zapnutí projektoru. Protože stav ZOOMu je zachován i po vypnutí a zapnutí projektoru a protože nelze nijak z projektoru vyčíst, v jakém stavu ZOOM je, je tento stav uložen a při příštím použití zohledněn - pokud je ZOOM změněn dálkovým ovládáním, pak není jak ho nastavit tuto dávkou správně a proto se musí ZOOM dálkovým ovládáním vždy vrátit do posledního stavu, jaký si dávka "pamatuje" nebo do výchozího 16:9 a smazat "paměť" konkrétně tedy soubor ResetZoom.bat
Dávkový soubor Anamorphic_source.BAT:
@echo off
set WhereAmI=%~dp0
set WhereAmI=%WhereAmI:~,-1%
set ScriptName=%WhereAmI%\projector_serial_terminal_control.vbs
set Engine=%SystemRoot%\SysWOW64\cscript.exe
if not exist "%Engine%" set Engine=%SystemRoot%\system32\cscript.exe
setlocal
set Command=QPW
set ResponseFile=%TEMP%\projector_state.txt
"%Engine%" //NoLogo "%ScriptName%" /P:1 /B:9600,N,8,1 /L:"%ResponseFile%" /M:R /A:Y /U:N /V:1 /X:N /C:%Command%
if %ErrorLevel% neq 0 goto error1
if not exist %ResponseFile% goto error1
set ProjectorState=
FOR /F %%I IN (%ResponseFile%) DO set ProjectorState=%%I
del %ResponseFile%
set Question=
set CommonPart=nastavit pro zobrazování obrazu v plné velikosti?
if "%ProjectorState%" == "000" set Question=Projektor je vypnutý, mám ho zapnout a %CommonPart%
if "%ProjectorState%" == "001" set Question=Mám projektor %CommonPart%
set CommonPart=
if "%Question%" == "" goto error2
%WhereAmI%\MsgBoxEx.EXE 4 %Question%
if %ErrorLevel% equ 7 goto ne
if %ErrorLevel% equ 6 goto ano
goto error3
:ano
if "%ProjectorState%" == "001" goto projector_on
endlocal
setlocal
set Command=PON
set ResponseFile=%TEMP%\projector_response.txt
"%Engine%" //NoLogo "%ScriptName%" /P:1 /B:9600,N,8,1 /L:"%ResponseFile%" /M:R /A:Y /U:N /V:1 /X:N /C:%Command%
if %ErrorLevel% neq 0 goto error4
if not exist %ResponseFile% goto error4
echo Projektor se zapíná... prodleva 30 vteřin
sleep 30
del %ResponseFile%
endlocal
setlocal
set Command=QPW
set ResponseFile=%TEMP%\projector_state.txt
"%Engine%" //NoLogo "%ScriptName%" /P:1 /B:9600,N,8,1 /L:"%ResponseFile%" /M:R /A:Y /U:N /V:1 /X:N /C:%Command%
if %ErrorLevel% neq 0 goto error1
if not exist %ResponseFile% goto error1
set ProjectorState=
FOR /F %%I IN (%ResponseFile%) DO set ProjectorState=%%I
del %ResponseFile%
if "%ProjectorState%" == "000" goto error5
if "%ProjectorState%" == "001" goto projector_on
goto error1
:projector_on
endlocal
setlocal
echo Projektor je zapnutý, posílám povely...
echo Nastavení režimu CINEMA1
set Command=VPM:CN1
set ResponseFile=%TEMP%\projector_response.txt
"%Engine%" //NoLogo "%ScriptName%" /P:1 /B:9600,N,8,1 /L:"%ResponseFile%" /M:R /A:Y /U:N /V:1 /X:N /C:%Command%
if %ErrorLevel% neq 0 goto error6
if not exist %ResponseFile% goto error6
del %ResponseFile%
rem 1 = s16:9 , 2 = H-FIT , 3 = V-FIT , 4 = ZOOM , 5 = 4:3 , 6 = 16:9
set /A LOOP=0
if exist %WhereAmI%\ResetZoom.bat call %WhereAmI%\ResetZoom.bat
:loop
if %LOOP% EQU 0 goto endloop
sleep 1
if %LOOP% EQU 6 echo Zoom: s16:9
if %LOOP% EQU 5 echo Zoom: H-FIT
if %LOOP% EQU 4 echo Zoom: V-FIT
if %LOOP% EQU 3 echo Zoom: ZOOM
if %LOOP% EQU 2 echo Zoom: 4:3
if %LOOP% EQU 1 echo Zoom: 16:9
set Command=VS1
"%Engine%" //NoLogo "%ScriptName%" /P:1 /B:9600,N,8,1 /L:"%ResponseFile%" /M:R /A:Y /U:N /V:1 /X:N /C:%Command%
if %ErrorLevel% neq 0 goto error6
if not exist %ResponseFile% goto error6
set /A LOOP=%LOOP% - 1
goto loop
:endloop
if exist %ResponseFile% del %ResponseFile%
if exist %WhereAmI%\ResetZoom.bat del %WhereAmI%\ResetZoom.bat
echo Hotovo...
sleep 2
goto clear
:ne
echo Operace zrušena uživatelem...
sleep 2
:clear
endlocal
set Engine=
set ScriptName=
set WhereAmI=
set ResponseFile=
goto :EOF
:error1
echo Nastala chyba při zjišťování stavu zapnutí/vypnutí projektoru!
pause
goto clear
:error2
echo Nastala chyba při vyhodnocování odpovědi z projektoru!
pause
goto clear
:error3
echo Nastala chyba při vyhodnocování odpovědi z MsgBoxEx.EXE!
pause
goto clear
:error4
echo Nastala chyba při zapínání projektoru!
pause
goto clear
:error5
echo Nastala chyba, nepodařilo se zapnout projektor!
pause
goto clear
:error6
echo Nastala chyba při zasílání povelu do projektoru!
pause
goto clear
Poznámka: platí totéž co předchozí skript.
Obě dávky jsou schopny běžet jak ve 32-bit Windows (x86), tak i v 64-bit Windows (x64). Význam parametrů příkazového řádku skriptu je popsán přímo ve skriptu, případně v tomto článku. Další články na téma Panasonic PT-AE4000 viz sloupec "Viz též" v pravo.
Z odkazů níže je možné stáhnout hotové dávky, skript i dotazovací program (pravým tlačítkem myši a vybrat Uložit jako...)::
Dotazovací program MsgBoxEx.EXE je ve článku MessageBoxEx v baťáku.
Tags: RS-232 projector control/automation from command-line |