Как заставить компьютер подать звуковой сигнал из скрипта / программы, вызываемой планировщиком задач Windows?

19412
gorcq

Я использую 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 

Это работает так же, включая тот факт, что он звучит только при вызове вручную. При вызове из планировщика задач он также не подает звуковой сигнал. Я не уверен, что еще попробовать здесь. Любая помощь будет оценена.

4

2 ответа на вопрос

4
nhinkle

Возможно, есть проблема с попыткой запустить систему медиаплеера из сценария. Вы можете создать пакетный скрипт с Ctrl+Gперсонажем, как вы упомянули, и он будет использовать системный звуковой сигнал. Я не думаю, что Ctrl+Cметод, о котором вы говорили, на самом деле работает.

Откройте командную строку, перейдите в каталог, в который вы хотите сохранить пакетный файл, и введите следующие команды:

copy con beep.cmd 

Ctrl+ G, Ctrl+Z

Теперь, если вы запустите beep.cmd, он должен использовать системный звуковой сигнал.

Я создал системную задачу для запуска этого пакетного файла, и когда я запускаю задачу вручную, появляется командное окно и подается звуковой сигнал, а затем завершается.

В этом случае он копирует все, что вы вводите в командном окне, в указанный файл beep.cmd. Вы не можете просто вставить в ^Gфайл, даже если это то, что появляется на экране, потому что печатание, которое на самом деле просто печатает ^и G, в то время ^Gкак фактически является представлением другого символа ASCII. Используя метод командной строки, вы можете сохранить фактическое нажатие клавиши в файл. Затем вы можете отредактировать командный файл, если хотите, чтобы он делал другие вещи, просто убедитесь, что строка содержит специальный символ. Это, вероятно, будет просто выглядеть как пустой блокнот в блокноте.

Извините, это ^ C опечатка. Я сделал Ctrl + G в фактическом командном файле. Я уверен, что это правда, потому что он работает, когда я запускаю файл вручную. Просто чтобы убедиться, я сейчас правильно переделал командный файл с теми же результатами. Я собираюсь редактировать свой вопрос, чтобы избежать путаницы в будущем. gorcq 13 лет назад 0
0
Randolf Richardson

Ищите опцию в вашем планировщике задач в свойствах вашей запланированной задачи, которая называется [что-то вроде] «взаимодействовать с пользователем» или «интерактивно» (или что-то в этом роде). Это должен быть флажок, и если вы включите его, это должно привести к тому, что ваша задача появится в графическом интерфейсе, а также в аудиосистеме.

В противном случае у Стива Гибсона (создателя знаменитой утилиты восстановления дисков SpinRite) есть бесплатный инструмент командной строки под названием «Wizmo», который может воспроизводить файл .wav из пакетного файла:

  Wizmo (установка не требуется - это автономный инструмент)
  http://www.grc.com/wizmo/wizmo.htm

Я надеюсь, что это также поможет вам (если это так, то вам, очевидно, нужно записать звуковой сигнал в файл .wav).

Я не вижу никаких вариантов, содержащих слово интерактивный или подобное. Я собираюсь присмотреться к этой штуковине. gorcq 13 лет назад 0
@gorcq: I recall seeing this option in Windows XP, but in Windows 7 it does appear to have disappeared. That's too bad (I wish Microsoft wouldn't drop good features like this). =( Randolf Richardson 13 лет назад 0
Я видел интерактивный вариант в Windows Server 2008 (Vista Server). Будут ли они удалены из 7, если планировщик задач использует одну и ту же DLL для этих двух версий Windows? ** РЕДАКТИРОВАТЬ ** Я могу ошибаться. 13 лет назад 0
Теперь я попробовал с Wizmo, и получить ту же проблему: он работает нормально, когда запускается вручную из командной строки, но без звукового сигнала, когда планировщик задач запускает его. Я только что отредактировал пакетный файл, показанный выше, и заменил все экземпляры "@echo ^ C" на "wizmo play =" C: \ Windows \ Media \ Windows Critical Stop.wav "". gorcq 13 лет назад 0
@Randolf Potter: Thanks for confirming that I'm remembering rather than imagining! Randolf Richardson 13 лет назад 0
@gorcq: So the Task Scheduler must be preventing all GUI and audio activity then. =( Randolf Richardson 13 лет назад 0
Это странная вещь - это не мешает ВСЕМ аудио. Проигрыватель Windows Media играет просто отлично. Это только звуковые сигналы, которые предотвращены. gorcq 13 лет назад 0
@Randolph Potter: Спасибо за подтверждение, что я помню, а не воображал! (Я не могу отредактировать свой предыдущий комментарий, поэтому я просто добавил этот комментарий с правильным написанием имени Рэндольфа.) Randolf Richardson 13 лет назад 1