Как воспроизвести аудиофайл без какого-либо окна и только если он еще не воспроизводится?

Вопрос или проблема

  1. Я записываю ошибки.
  2. Некоторые ошибки в моем просмотрщике журналов запускают исполняемый файл.
  3. Этот исполняемый файл воспроизводит звук.
  4. Я знаю, что мне нужно посмотреть в мой журнал.

Это отлично работает, пока я не работаю над чем-то, что вдруг хочет вызвать это, скажем, три тысячи раз за 500 мс. Когда это происходит… Скажем так, Windows не предназначен для воспроизведения 3000 экземпляров одного и того же аудиофайла одновременно.

Я использовал Sounder для воспроизведения звуков без отображения любых окон. Это работает отлично, если вы не пытаетесь открыть его 3,000 раз за 500 мс.

Недавно моя работа привела меня к тому, что я столкнулся с глупыми числами ошибок очень быстро. Поэтому я вспомнил, что у меня есть пакетная программа, которая загружает все мои программы (но пропускает те, которые уже открыты). Поэтому я адаптировал это, чтобы загрузить sounder:

C:

SETLOCAL EnableExtensions
set EXE=sounder.exe
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
cd "C:\example"
start sounder.exe "C:\example\potato_timer_01.wav"
goto FIN
:FOUND
echo Sounder уже запущен.
:FIN

Проблема в том, что запуск пакетных файлов теперь открывает окно, чего я не хочу.

Ладно, хорошо… Я провел больше исследований, и кто-то на другой ветке сказал, что запуск скрипта VBS может скрыть окно:

CreateObject("Wscript.Shell").Run "sounder_potato_timer_01.bat", 0, True

Это отлично работает… если я открываю это вручную. Однако моя программа просмотра журналов не может открыть его (я не знаю почему, я ничего не слышу и не получаю никаких сообщений об ошибках или не вижу открывающихся окон). Поэтому я сильно сомневаюсь, что просмотрщик журналов принимает любые типы исполняемых файлов в командной строке.

Да, я пробовал исследовать другие программы, такие как VLC, но, похоже, они не поддерживают выполнение без окон. Я исчерпал варианты и буду благодарен за любые конструктивные предложения по достижению моей цели. Итак, в кратце:

Как запустить bat или exe файл без отображения окна и воспроизводить файл только если другие экземпляры не запущены?

Моя программа для просмотра журналов – Hoo Wintail (у нее есть бесплатная пробная версия). Я готов обновить свой вопрос, чтобы отметить, какие другие типы исполняемых файлов работают, а какие нет. Я также готов попробовать другие программы командной строки, кроме sounder.exe, если у кого-то есть полезная рекомендация.

Пожалуйста, помните, что моя цель – столкнуться с роями ошибок, не делая мой компьютер неработоспособным. Таким образом, я могу определить, что сломано, исправить это и не заставлять других сталкиваться с роями ошибок.

Ответ или решение

Чтобы воспроизвести аудиофайл в Windows без отображения окна и только в том случае, если он еще не воспроизводится, вам потребуется хорошо продуманная конфигурация скрипта и использование правильных инструментов. В этом ответе я опишу стратегии, как вы можете достичь этой цели.

Шаги для успешного воспроизведения аудиофайла

  1. Используйте скрипт на VBS:
    Для запуска скрипта без отображения окна вам нужно использовать VBScript, который поддерживает фоновый запуск программ. Убедитесь, что ваш командный скрипт (bat-файл) будет запускаться именно через VBScript, чтобы избежать появления окон:

    Set objShell = CreateObject("Wscript.Shell")
    objShell.Run "C:\example\sounder_potato_timer_01.bat", 0, False

    В этом примере 0 указывает на скрытый режим. Попробуйте обновить ваш bat-файл так, чтобы он проигрывал звук, только если предыдущий экземпляр не запущен.

  2. Проверка существующих экземпляров:
    Ваша логика проверки tasklist в bat-файле была правильной. Однако стоит немного расширить вашу логику для более надежного выполнения. Пример:

    @echo off
    SETLOCAL EnableExtensions
    set EXE=sounder.exe
    
    ; Проверка, запущен ли уже экземпляр
    FOR /F "tokens=1" %%a IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO (
       if /I "%%a"=="%EXE%" (
           echo Sounder is already running.
           exit /b 0
       )
    )
    
    ; Если экземпляр не найден, запускаем
    cd "C:\example"
    start /B sounder.exe "C:\example\potato_timer_01.wav"

    В этом коде start /B используется, чтобы запустить sounder.exe в фоновом режиме, что может помочь в исключении появления окна.

  3. Обработка команд из вашей программы просмотра логов:
    Убедитесь, что ваша программа для просмотра логов (Hoo Wintail) правильно настроена для выполнения скриптов. Возможна проблема – программа не поддерживает запуск дополнительных файлов или операций ввода вывода.

  4. Альтернативные инструменты для воспроизведения звука:
    Если sounder.exe не подходит под ваши требования, рассмотрите возможность использования других инструментов:

    • NirCmd: Это небольшой инструмент, который позволяет выполнять различные операции с системными командами. Его можно использовать для воспроизведения звуков без создания окон:
    nircmd.exe mediaplay 5000 "C:\example\potato_timer_01.wav"

    Здесь, 5000 – это время воспроизведения в миллисекундах.

    • ffmpeg: Это мощный инструмент для обработки медиаданных, который может быть использован для воспроизведения звуков. Сделайте его частью вашей автоматизации:
    start /B ffmpeg -i "C:\example\potato_timer_01.wav" -nodisp -autoexit

Заключение

Следуя указанным выше шагам, вы сможете эффективно воспроизводить звук в Windows, не открывая окон и избегая множества зацикленных воспроизведений. Убедитесь в том, что каждая часть вашего решения проверена и функционирует должным образом в контексте вашей среды. Это улучшит опыт работы с вашими логами и позволит сосредоточиться на устранении ошибок, не отвлекаясь на технические неполадки.

Оцените материал
Добавить комментарий

Капча загружается...