0

バッチアラームを作成していますが、サウンドを自動的に大きくする方法が必要なので、そうする必要はありません。

アラームの現在のコード (他に改善点がある場合は、遠慮なく提案してください)。

@ECHO OFF
color 0a
cls
echo Ezlo alarm system
echo The curent time is: %time%
set /p INPUT=What time should the alarm be set for? (24hr) 
:time
cls
echo Ezy alarm
echo The curent time is: %time%
Echo Alarm is set for %input%
if '%TIME%'=='%INPUT%' GOTO ALARM
GOTO time
:ALARM
ECHO get up!
start "D:\Users\nic\Desktop\ezlo alarm\alarmtone.mp3"
echo press space to close
PAUSE >nul
4

2 に答える 2

3

確かに、これは大雑把ですが、機能します。キーコード0xAFはボリュームアップ用の仮想キーです。そのキー コードを 50 回送信する JScript のコードを次に示します。

var shl = new ActiveXObject("WScript.Shell");
for (var i=0; i<50; i++) {
    shl.SendKeys(String.fromCharCode(0xAF));
}

バッチ + JScript ハイブリッド形式を使用して、これをバッチ スクリプトに組み込むことができます。私はあなたのスクリプトにもいくつかの微調整を行い、ループごとに画面をクリアする代わりに現在の時間をバックスペースして再出力し、時間比較を数学比較にして、hh:mm秒とセンチ秒を指定する必要なく入力できるようにしました。ところどころ少し磨きます。

@if (@a==@b) @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));
}

残念ながら、システム ボリュームがミュートされているかどうかをプログラムで検出する簡単な方法はありません。確かに、ミュートを切り替えるためのキー コードはありますが、それを起動する必要があるかどうかを簡単にプログラムで確認する方法はありません。システムがミュートされないようにするスクリプトが必要な場合、最も簡単な解決策は、NirCmdなどのサードパーティのユーティリティを使用することです。詳細については、この回答を参照してください。

于 2013-04-10T13:04:24.077 に答える
0

http://gallery.technet.microsoft.com/scriptcenter/PowerShell-Set-PC-Volume-1737b160 バッチ ファイルからこの exe を呼び出してボリュームを制御できます。しかし、バッチファイルから直接できるかどうかはわかりません

于 2013-04-10T09:40:47.907 に答える