batch может воспроизводить музыку c, создав и запустив скрипт vbs для использования внутреннего windows медиаплеера.
Примечание. Во всех приведенных ниже скриптах переменная% sounds% относится к папке. ваши звуковые сценарии находятся и должны быть определены.
Суть игры musi c заключается в следующем пакетном сценарии:
@Echo off & REM MusicPlayer.bat
Set "MusicPath=%~1" & REM Full Path for the music file
Set "vol=%~2" & REM Volume as number between 0 and 100
Set "LoopTF=%~3" & REM 'paramater 3 as 'true' or 'false' determines if the track is to be looped.
(
PUSHD %sounds%
%= Change to the directory your sound files are located =%)
::: Ensure no Conflict with the Previous Script.
IF exist PlayMusic.vbs (
DEL PlayMusic.vbs
)
::: Creates a vbs Script to launch the music (Occurs without any visual indication or prompting)
(
echo Set Sound = CreateObject("WMPlayer.OCX.7"^)
echo Sound.URL = "%MusicPath%"
echo Sound.settings.volume = %vol%
echo Sound.settings.setMode "loop", %LoopTF%
echo Sound.Controls.play
echo While Sound.playState ^<^> 1
echo WScript.Sleep 100
echo Wend
echo Sound objTS = Nothing 'Destroy the object.
)>PlayMusic.vbs
start /min PlayMusic.vbs
(
POPD
%= Return to your Previous Directory =%)
::: Exit the Launcher and return to Previous batch program.
GOTO :EOF
Вышеупомянутый сценарий вызывается с 3 параметрами, как отмечено .
Другие Vbs можно использовать для контроля состояния партии и вызова скрипта партии, чтобы остановить воспроизведение c, когда партия закрыта:
@Echo off & REM Monitor.bat
(
ECHO Set objWMIService = GetObject ("winmgmts:"^)
ECHO Set proc = objWMIService.ExecQuery("select * from Win32_Process Where Name='cmd.exe'"^)
ECHO DO while proc.count ^> 0
ECHO Set proc = objWMIService.ExecQuery("select * from Win32_Process Where Name='cmd.exe'"^)
ECHO if proc.count ^< 1 then exit do
ECHO wscript.sleep 1500
ECHO loop
ECHO Set WshShell=createobject("wscript.shell"^)
ECHO WshShell.run "%sounds%\KillMusic.bat", 0, true
)>%sounds%\MusicMonitor.vbs
start %sounds%\MusicMonitor.vbs
Goto :EOF
Приведенный выше скрипт создает скрытый VBS, который выбирает количество экземпляров cmd.exe через objWMIService.ExecQuery. Это происходит в течение всего oop с условием прерывания 0 open cmd.exe windows. В l oop встроен спящий режим, чтобы уменьшить частоту обращений к службе WMI, так как они очень ресурсоемки. Когда происходит перерыв l oop, он запускает программу killmusi c .bat в скрытом состоянии.
Следующий скрипт «KillMusi c .bat» вызывается либо непосредственно в вашей метке выхода, либо монитором VBS, когда он определяет, что Cmd.exe больше не работает. DoMonitor
- это переменная, которая изменяется в вашем основном скрипте до вызова killmusi c. 1
указывает на то, что монитор должен быть перезапущен, и используется, когда killmusi c .bat останавливает текущую воспроизводимую песню, чтобы начать новую песню. Monitor
- это переменная, содержащая путь к Monitor.bat
@ECHO OFF & REM KillMusic.bat
taskkill /pid WScript.exe /f /t >nul
IF exist "%sounds%\PlayMusic.vbs" (
DEL /Q "%sounds%\PlayMusic.vbs"
)
Timeout 1 > nul
IF "%DoMonitor%"=="1" GOTO reset
GOTO :EOF
:reset
CALL "%Monitor%"
GOTO :EOF
Эти три программы можно увидеть здесь.