Bien sûr, c'est brut, mais cela fonctionne. Le code clé 0xAF
est un virtual key pour augmenter le volume. Voici un peu de JScript pour envoyer ce code de clé 50 fois.
var shl = new ActiveXObject("WScript.Shell");
for (var i=0; i<50; i++) {
shl.SendKeys(String.fromCharCode(0xAF));
}
Vous pouvez intégrer dans votre script batch en utilisant un format hybride lot + JScript. J'ai fait quelques autres modifications à votre script, en ayant le temps passé backpass et reoutput au lieu d'effacer l'écran sur chaque boucle, ce qui rend la comparaison de temps une comparaison mathématique pour permettre l'entrée de hh:mm
sans avoir à spécifier des secondes et centisecondes, et sinon juste un peu de polissage ici et là.
@if (@[email protected]) @end /*
:: batch portion
@ECHO OFF
setlocal
cls && color 0a
:: capture backspace character to %BS%
for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "BS=%%a"
echo Ezlo alarm system
call :gettime now
echo The curent time is: %now%
set /p INPUT=What time should the alarm be set for? (24hr)
echo;
if "%now%" geq "%input%" (set tomorrow=1) else set tomorrow=
if defined tomorrow (
echo Alarm is set for %input% tomorrow.
) else echo Alarm is set for %input%.
set /p "=The curent time is: "<NUL
:time
call :gettime now
set /p "=%now%"<NUL
if "%now%" geq "%INPUT%" (
if not defined tomorrow GOTO ALARM
) else if defined tomorrow set tomorrow=
ping -n 2 0.0.0.0 >NUL
call :len %now% len
for /l %%I in (1,1,%len%) do set /p "=%BS%"<NUL
GOTO time
:ALARM
echo;
ECHO get up!
cscript /nologo /e:jscript "%~f0"
start "" "D:\Users\nic\Desktop\ezlo alarm\alarmtone.mp3"
echo press space to close
PAUSE >nul
color 07
exit /b
:gettime <varname>
set "gtvarnow=%time:~0,-3%"
set "%~1=%gtvarnow: =%"
goto :EOF
:len <string> <varname>
set len=0
set str=%~1
:len_loop
if defined str (
set "str=%str:~1%"
set /a "len+=1"
goto :len_loop
) else set "%~2=%len%"
goto :EOF
:: JScript portion */
var shl = new ActiveXObject("WScript.Shell");
for (var i=0; i<50; i++) {
shl.SendKeys(String.fromCharCode(0xAF));
}
Malheureusement, il n'y a pas moyen facile programme pour détecter si le volume du système est coupé. Bien sûr, il y a un code clé pour basculer muting, mais pas de manière programmatique facile de vérifier s'il doit être déclenché ou non. Si vous avez besoin de votre script pour forcer le système à ne pas être coupé, la solution la plus simple consiste à utiliser un utilitaire tiers tel que NirCmd. Voir this answer pour plus de détails.
Pourquoi cette question est-elle marquée [c] et [nul]? – alk
Bienvenue à S.O. Si c'est la première fois que vous êtes ici, jetez un coup d'œil sur [cette information] (http://meta.stackexchange.com/a/5235/187716) pour marquer une réponse comme acceptée. – rojo