Как заставить компьютер подать звуковой сигнал из скрипта / программы, вызываемой планировщиком задач Windows?
Я использую Windows 7 Home Edition. Я хочу заставить свой компьютер подождать определенное время, а затем подать звуковой сигнал прямо перед тем, как он завершит работу программы. В качестве теста я написал следующий пакетный файл, чтобы проигрыватель Windows Media проигрывал радио, подождал 10 секунд, затем подал звуковой сигнал и выключил его:
@echo off
start "_" "C:\Program Files (x86)\Windows Media Player\wmplayer.exe" "http://www.cpr.org/content_category_templates/listenTemplate/listenClassical48.asx"
sleep 10
@echo ^G
@echo ^G
@echo ^G
@echo ^G
taskkill /im wmplayer.exe /f
Примечание: следуя инструкциям, которые я нашел в другом вопросе на этом сайте, "^G" - это символ, который вы получаете, когда набираете control + G в командной строке. Похоже, он не появляется на этом сайте, поэтому я заменил его на ^G.
Это сработало отлично. Пока я не попытался запустить его автоматически с помощью планировщика заданий Windows. Я пробовал это несколько раз, и он не подал звуковой сигнал. Другие функции работали нормально, но звукового сигнала не было.
Сценарий не запускался в окне при запуске планировщиком задач, и я пришел к выводу, что это должно вызвать проблемы с командой echo (ничего не отображать). Итак, потратив некоторое время на поиск метода подачи звукового сигнала, не включающего эхо, я в конечном итоге переписал все это в форме консольной программы VB .NET:
Imports System.Threading
Module Beep
Sub Main()
Dim wmp As New System.Diagnostics.Process
wmp.StartInfo.FileName = "C:\Program Files (x86)\Windows Media Player\wmplayer.exe"
wmp.StartInfo.Arguments = "http://www.cpr.org/content_category_templates/listenTemplate/listenClassical48.asx"
wmp.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
wmp.Start()
Thread.Sleep(New TimeSpan(0, 0, 10))
Console.Beep()
Console.Beep()
Console.Beep()
Console.Beep()
wmp.Kill()
End Sub
End Module
Это работает так же, включая тот факт, что он звучит только при вызове вручную. При вызове из планировщика задач он также не подает звуковой сигнал. Я не уверен, что еще попробовать здесь. Любая помощь будет оценена.
2 ответа
Возможно, есть проблема с попыткой запустить систему медиаплеера из сценария. Вы можете создать пакетный скрипт с Ctrl+G
символ, как вы упомянули, и он будет использовать системный звуковой сигнал. Я не думаю, что Ctrl+C
Метод, о котором вы говорили, на самом деле работает.
Откройте командную строку, перейдите в каталог, в который вы хотите сохранить пакетный файл, и введите следующие команды:
copy con beep.cmd
Ctrl+G, Ctrl+Z
Теперь, если вы бежите beep.cmd
, он должен использовать системный звуковой сигнал.
Я создал системную задачу для запуска этого пакетного файла, и когда я запускаю задачу вручную, появляется командное окно и подается звуковой сигнал, а затем завершается.
Это работает так, что он копирует все, что вы вводите в командном окне, в указанный файл, в этом случае beep.cmd
, Вы не можете просто вставить ^G
в файле, хотя это то, что появляется на экране, потому что печатать это на самом деле просто печатать ^
а также G
, в то время как ^G
на самом деле представляет собой совершенно другой символ ASCII. Используя метод командной строки, вы можете сохранить фактическое нажатие клавиши в файл. Затем вы можете отредактировать пакетный файл, если хотите, чтобы он делал другие вещи, просто убедитесь, что строка содержит специальный символ. Вероятно, это будет выглядеть как пустой блокнот в блокноте.
Этот код сохранит персонажа 0x07
(в шестнадцатеричном формате == ^G
== beep
) в переменной и будет использоваться echo
командная строка.
Также вызывая rundll32.exe
для вывода звука, содержащегося в .dll
файл, автор / @npocmaka в этом ответе.
@echo off && setlocal EnableDelayedExpansion
title <nul && title Windows Media Player && cd /d "%~dp0"
%__APPDIR__%mode.com con: cols=50 lines=3 && cls && set "_url=http://94.23.221.158:9197/stream"
for /f %%i in ('%__APPDIR__%forfiles.exe /m "%~nx0" /c "cmd.exe /c echo/0x07"') do set "_Beep=%%~i"
echo/Starting Windows Media Player... & start "_" "C:\Program Files (x86)\Windows Media Player\wmplayer.exe" %_url%
"%__APPDIR__%timeout.exe" /t 10 >nul & color f4
for /L %%L in (1 1 9)do echo/!_Beep!Times up^!!...&& %__APPDIR__%pathping.exe 127.1 -n -q 1 -p 666 >nul && (
color 4f & %__APPDIR__%rundll32.exe %__APPDIR__%cmdext.dll,MessageBeepStub & color f4 & cls & echo/
call "%__APPDIR__%pathping.exe" 127.1 -n -q 1 -p 666 >nul & echo/!_Beep!Times up^!!...& cls & echo/
)
"%__APPDIR__%taskkill.exe" /f /im "wmplayer.exe" >nul & endlocal & color 0a & goto :EOF
Ищите опцию в вашем планировщике задач в свойствах вашей запланированной задачи, которая называется [что-то вроде] "взаимодействовать с пользователем" или "интерактивно" (или что-то в этом роде). Это должен быть флажок, и если вы включите его, это должно привести к тому, что ваша задача появится в графическом интерфейсе, а также в аудиосистеме.
В противном случае у Стива Гибсона (создателя знаменитой утилиты восстановления дисков SpinRite) есть бесплатный инструмент командной строки под названием "Wizmo", который может воспроизводить файл.wav из пакетного файла:
Wizmo (установка не требуется - это автономный инструмент)
http://www.grc.com/wizmo/wizmo.htm
Я надеюсь, что это также поможет вам (если это так, то вам, очевидно, нужно записать звуковой сигнал в файл.wav).