【问题标题】:Play invisible music with batch file?用批处理文件播放隐形音乐?
【发布时间】:2014-04-26 16:34:10
【问题描述】:

我看到一个 cfew 线程说如何在以start /min 开头时最小化播放音乐,以及创建一个 VBS 脚本来运行最小化音频的线程。但无论我尝试以哪种方式最小化音频运行,它都会出现在屏幕上。

另外,如果我尝试start /minstart /max,我会得到相同的结果。

有谁知道我怎样才能开始最小化一些事情?

【问题讨论】:

  • 您要启动什么应用程序?您是否能够做到这一点可能取决于应用程序本身。您的问题有一个可能的解决方案:Batch File To Play A Song.
  • 我刚刚尝试使用 wmplayer
  • 我认为 Windows Media 无法通过使用命令行开关来做到这一点。

标签: batch-file audio hidden


【解决方案1】:
@echo off
set "file=track12.mp3"
( echo Set Sound = CreateObject("WMPlayer.OCX.7"^)
  echo Sound.URL = "%file%"
  echo Sound.Controls.play
  echo do while Sound.currentmedia.duration = 0
  echo wscript.sleep 100
  echo loop
  echo wscript.sleep (int(Sound.currentmedia.duration^)+1^)*1000) >sound.vbs
start /min sound.vbs

只需将track12.mp3 更改为您的音频文件的名称

循环播放同一首歌曲:

@echo off
set "file=track12.mp3"
( echo Set Sound = CreateObject("WMPlayer.OCX.7"^)
  echo Sound.URL = "%file%"
  echo Sound.Controls.play
  echo do while Sound.currentmedia.duration = 0
  echo wscript.sleep 100
  echo loop
  echo wscript.sleep (int(Sound.currentmedia.duration^)+1^)*1000) >sound.vbs

:loop
start "" /wait /min sound.vbs
goto:loop

【讨论】:

  • 我知道我来晚了,但是有没有办法让这个循环?如;声音文件播放完会自动循环回到开头吗?
  • 只需删除最后一行start /min sound.vbs 并输入::loop start "" /wait /min sound.vbs goto:loop 它将循环播放同一首歌曲....
  • 有问题!如何阻止它
  • 一种方式:Taskkill /F /IM wscript.exe
【解决方案2】:
CreateObject("Wscript.Shell").Run "wmplayer /play /close ""Your file location here""", 0, False

【讨论】:

  • 您能否为您的答案添加一些解释?仅代码答案在 SO 上不受欢迎。
  • 见上面@Thuba 的回复/解释。
【解决方案3】:

对于提问者来说显然已经很晚了,但谁知道呢?别人可能会看。因此,我将重申 Tony BD 从 14 年 4 月开始的回答,由于有人抱怨这是一个代码唯一的答案,我将添加一些解释,实际上需要的很少。

1.) 打开 Windows 记事本

2.) 将 Tony BD 的代码复制到记事本中

3.) 将“Your file location here”替换为您要播放的音乐文件的完整路径。

4.) 在记事本菜单中选择文件|另存为。 .

5.) 选择一个位置并为文件命名,但要确保给它一个 .vbs 结尾而不是标准的 .txt 文件类型。

6.) 关闭记事本

7.) 点击您刚刚制作的 vbs 文件,您的音乐文件将开始播放,屏幕上完全没有显示任何内容。

代码中的 0 参数使 WMP 可以在不可见的窗口中打开。如果将 0 更改为 1,您将看到 WMP 的图形界面。

显然,这仅适用于 Windows 用户,但对他们来说,这是解决问题的最佳和最简单的解决方案。

【讨论】:

  • 非常感谢 Tony 的回答。否则我永远不会尝试过。我做到了,它有效,而且我知道它为什么有效。
  • 您应该编辑 tony 的答案,而不是创建另一个答案。
【解决方案4】:

这是从另一个答案(也是我自己)复制/粘贴的,其中包括作为对问题的其中一个要点(播放 wav 文件而没有可见应用程序)的可能答案。

对于播放声音部分,据我所知,没有办法 直接从命令行播放自定义wav而不产生 另一个过程。常用工具有vlc、wmplayer、vbs文件 实例化 wmplayer ocx、录音机、powershell……所有这些 选项记录在以前的问题中(只是第一个) here 在 stackoverflow 或 here 超级用户。

扩展其中一种选择,如果您可以访问一些 C 编译器(用mingw测试)这个代码将生成一个控制台工具 调用PlaySound API 函数,将第一个参数传递为 要播放的文件。

#include <windows.h>
int main(int argc, char **argv)
{
    if (argc < 2) return 1;
    if (!PlaySound( 
            argv[1], 
            NULL, 
            SND_FILENAME | SND_NODEFAULT | SND_SYNC
       )
    ) return 2;
    return 0;
}

根据您的配置,您需要包含参考 到链接器的 Winmm 库。

【讨论】:

  • 应该有人用它制作二进制文件。并在一些类似 github 的网站上以免费许可证发布。
【解决方案5】:

我使用的是:用于 Windows 的 VLC(免费下载)。适用于 XP 到 10。

使用这个

"c:\Program Files (x86)\videolan\vlc\vlc.exe" --qt-start-minimized --play-and-exit 
"c:\Program Files (x86)\videolan\vlc\Windows Exclamation.wav"

路径和引号仅作为示例;肉是

vlc --qt-start-minimized --play-and-exit soundFilename

【讨论】:

    【解决方案6】:

    批量音乐播放器.bat

    @echo off
    setlocal enabledelayedexpansion
    Set vbsfile=%temp%\Intro.vbs
    Set URL=http://hackoo.alwaysdata.net/Intro_DJ.mp3
    Call:Play %URL% %vbsfile%
    Start %vbsfile%
    Set MyFile=%~f0
    Set ShorcutName=DJ Batch Music Player
    (
    echo Call Shortcut("%MyFile%","%ShorcutName%"^)
    echo ^'**********************************************************************************************^)
    echo Sub Shortcut(CheminApplication,Nom^)
    echo    Dim objShell,DesktopPath,objShortCut,MyTab
    echo    Set objShell = CreateObject("WScript.Shell"^)
    echo    MyTab = Split(CheminApplication,"\"^)
    echo    If Nom = "" Then
    echo    Nom = MyTab(UBound(MyTab^)^)
    echo    End if
    echo    DesktopPath = objShell.SpecialFolders("Desktop"^)
    echo    Set objShortCut = objShell.CreateShortcut(DesktopPath ^& "\" ^& Nom ^& ".lnk"^)
    echo    objShortCut.TargetPath = Dblquote(CheminApplication^)
    echo    ObjShortCut.IconLocation = "Winver.exe,0"
    echo    objShortCut.Save
    echo End Sub
    echo ^'**********************************************************************************************
    echo ^'Fonction pour ajouter les doubles quotes dans une variable
    echo Function DblQuote(Str^)
    echo    DblQuote = Chr(34^) ^& Str ^& Chr(34^)
    echo End Function
    echo ^'**********************************************************************************************
    ) > %temp%\Shortcutme.vbs
    Start /Wait %temp%\Shortcutme.vbs
    Del %temp%\Shortcutme.vbs
    ::****************************************************************************************************
    Title DJ Batch Music Player by Hackoo 2015
    :menuLOOP
    Color 0A & Mode con cols=78 lines=25
    echo(
    echo        ===============================================================
    echo        "/  |  /  |                    /  |                          ";
    echo        "$$ |  $$ |  ______    _______ $$ |   __   ______    ______  ";
    echo        "$$ |__$$ | /      \  /       |$$ |  /  | /      \  /      \ ";
    echo        "$$    $$ | $$$$$$  |/$$$$$$$/ $$ |_/$$/ /$$$$$$  |/$$$$$$  |";
    echo        "$$$$$$$$ | /    $$ |$$ |      $$   $$<  $$ |  $$ |$$ |  $$ |";
    echo        "$$ |  $$ |/$$$$$$$ |$$ \_____ $$$$$$  \ $$ \__$$ |$$ \__$$ |";
    echo        "$$ |  $$ |$$    $$ |$$       |$$ | $$  |$$    $$/ $$    $$/ ";
    echo        "$$/   $$/  $$$$$$$/  $$$$$$$/ $$/   $$/  $$$$$$/   $$$$$$/  ";
    echo        "                                                            ";
    echo        "                                                            ";
    echo(       =============================Menu==============================
    echo(
    for /f "tokens=2* delims=_ " %%A in ('"findstr /b /c:":menu_" "%~f0""') do echo                         %%A  %%B
    echo(
    echo(       ===============================================================
    set choice=
    echo( & set /p choice=Make a choice or hit ENTER to quit: || GOTO :EOF
    echo( & call :menu_[%choice%]
    GOTO:menuLOOP
    ::********************************************************************************************
    :menu_[1] Play DJ Buzz Radio
    cls & color 0A
    Call:SkipLine 10
    Call:Tab 3
    echo %x% Please Wait for a while .. Launching DJ Buzz Radio ...
    Taskkill /IM "wscript.exe" /F >nul 2>&1
    Set vbsfile=%temp%\DJBuzzRadio.vbs
    Set URL=http://www.chocradios.ch/djbuzzradio_windows.mp3.asx
    Call:Play %URL% %vbsfile%
    Start %vbsfile%
    TimeOut /T 1 /NoBreak>nul
    GOTO:menuLOOP
    ::********************************************************************************************
    :menu_[2] Play David Guetta Mix
    cls & color 0A
    Call:SkipLine 10
    Call:Tab 3
    echo %x% Please Wait for a while .. Launching David Guetta Mix ...
    Taskkill /IM "wscript.exe" /F >nul 2>&1
    Set vbsfile=%temp%\David_Guetta_Miami.vbs
    Set URL=http://hackoo.alwaysdata.net/David_Guetta_Miami_2014.mp3
    Call:Play %URL% %vbsfile%
    Start %vbsfile%
    TimeOut /T 1 /NoBreak>nul
    GOTO:menuLOOP
    ::********************************************************************************************
    :menu_[3] Play Ibiza Mix
    cls & color 0A
    Call:SkipLine 10
    Call:Tab 3
    echo %x% Please Wait for a while .. Launching Ibiza Mix ...
    Taskkill /IM "wscript.exe" /F >nul 2>&1
    Set vbsfile=%temp%\IbizaMix.vbs
    Set URL=http://hackoo.alwaysdata.net/IbizaMix.mp3
    Call:Play %URL% %vbsfile%
    Start %vbsfile%
    TimeOut /T 1 /NoBreak>nul
    GOTO:menuLOOP
    ::********************************************************************************************
    :menu_[4] Play Avicii Mega Mix
    cls & color 0A
    Call:SkipLine 10
    Call:Tab 3
    echo %x% Please Wait for a while .. Launching Avicii Megamix ...
    Taskkill /IM "wscript.exe" /F >nul 2>&1
    Set vbsfile=%temp%\IbizaMix.vbs
    Set URL="http://hackoo.alwaysdata.net/Best of Avicii Megamix 2014.mp3"
    Call:Play %URL% %vbsfile%
    Start %vbsfile%
    TimeOut /T 1 /NoBreak>nul
    GOTO:menuLOOP
    ::********************************************************************************************
    :menu_[5] Play Mega Mix 90
    cls & color 0A
    Call:SkipLine 10
    Call:Tab 3
    echo %x% Please Wait for a while .. Launching Mega Mix 90 ...
    Taskkill /IM "wscript.exe" /F >nul 2>&1
    Set vbsfile=%temp%\IbizaMix.vbs
    Set URL="http://hackoo.alwaysdata.net/Megamix 90.mp3"
    Call:Play %URL% %vbsfile%
    Start %vbsfile%
    TimeOut /T 1 /NoBreak>nul
    GOTO:menuLOOP
    ::********************************************************************************************
    :menu_[6] Stop the music
    cls & color 0C
    Call:SkipLine 10
    Call:Tab 3
    echo  %x% Please Wait for a while .. Stopping the music ...
    Taskkill /IM "wscript.exe" /F >nul 2>&1
    TimeOut /T 1 /NoBreak>nul
    GOTO:menuLOOP
    ::********************************************************************************************
    :Play
    (
    echo Play "%~1"
    echo Sub Play(URL^)
    echo    Dim Sound
    echo    Set Sound = CreateObject("WMPlayer.OCX"^)
    echo    Sound.URL = URL
    echo    Sound.settings.volume = 100
    echo    Sound.Controls.play
    echo    do while Sound.currentmedia.duration = 0
    echo        wscript.sleep 100
    echo    loop
    echo    wscript.sleep (int(Sound.currentmedia.duration^)+1^)*1000
    echo End Sub
    )>%~2
    ::*********************************************************************************************
    :Tab
    set "x="
    For /L %%I In (1,1,%1) Do Set "x=!x!    "
    REM                                  ^-- this is a TAB
    goto :eof
    ::*********************************************************************************************
    :SkipLine
        For /L %%I In (1,1,%1) Do Echo(
        Goto:Eof
    :EOF
    EXIT
    ::********************************************************************************************* 
    

    【讨论】:

      【解决方案7】:

      只需使用 Sounder.exe

      例如你的命令行是 Sounder MyWaveFile.wav

      从那里得到它

      http://www.elifulkerson.com/projects/commandline-wav-player.php

      【讨论】:

      • 在此处添加详细信息,因为外部链接将来可能会更改
      【解决方案8】:

      对于 mac 来说是这样。 . .

      afplay (your music file name here)
      

      注意:它必须在iTunes音乐的iTunes文件夹中。

      【讨论】:

        【解决方案9】:

        这是一种在批处理程序中播放声音文件的多合一解决方案,同时隐藏所有内容,具有在关闭 cmd 窗口时停止音乐的先天能力。利用 vbs 脚本和辅助批处理程序,每个程序都是从初始脚本创建的。

        它使用与其他关于使用 vbs 以受控设置播放音乐的答案类似的方法。

        @ECHO OFF & CD "%~dp0"
            Set "ProgDir=%~dp0"
            If not exist "%ProgDir%Sounds" MD "%ProgDir%Sounds"
            Set "Sounds=%ProgDir%Sounds"
            Set "Player=%Sounds%\BatchMusicPlayer.bat"
            Set "MusicStopper=%Sounds%\StopMusic.bat"
            Set "Monitor=%Sounds%\BatchMonitor.vbs"
            If not Exist "%Player%" Call :makeplayer
            If not Exist "%MusicStopper%" Call :makestopper
            If not Exist "%Monitor%" Call :makemonitor
        
        Start "" "%Monitor%"
        
        :main
        REM play directly by calling this batch using these parameters: <full track path> <vol 0-100> <Loop true / false>
            If not "%~3"=="" If Exist "%~1" (
                For %%A in (true false) do If /I "%%A" == "%~3" (
                    Call "%Player%" "%~1" %~2 %~3
                    Exit /B
                )
            )
        REM autoplay any song or sound dropped on the batch or when called without additional parameters.
            If Exist "%~1" If "%~2"=="" (Set "track=%~1" & Set "vol=80" & Set "Loop_TF=false" & Goto :Launch)
        
        REM manually enter trackpath, volume and true / false value for repeating sound.        
        
            )   
            cls
            Set track=
            Set /p "track=[Full track path :>"
            IF NOT DEFINED track Goto :main
            For %%A in (quit q exit e killmusic stop) do IF /I "%track%" == "%%A" Goto :end
            IF /I NOT EXIST "%track%" Goto :main
        
        :volume
            set vol=
            Set /p "vol=[Volume :>"
            For %%A in ("%vol%") do (
                For %%B in (q quit e exit c cancel s stop) do IF /I "%%~A" == "%%B" Goto :main
                For /L %%C in (1,1,100) do If "%%~A"=="%%C" Goto :repeat
            )
        Goto :volume
        
        :repeat
            Set Loop_TF=
            Set /p "Loop_TF=[Repeat ('true' or 'false') :>"
            IF NOT DEFINED Loop_TF Goto repeat
            For %%A in ("%Loop_TF%") do (
                For %%B in (true false) do IF /I "%%~A" == "%%B" Goto :Launch
                For %%C in (q quit e exit c cancel s stop) do IF /I "%%~A" == "%%C" Goto :main
            )
        Goto :repeat
        
        :Launch
            CALL "%player%" "%track%" %vol% %Loop_TF%
        REM Exit /B
            pause
        Goto :main
        
        :makeplayer
        (
            Echo.@ECHO OFF
            Echo.Set "MusicPath=%%~1"
            Echo.Set "vol=%%~2"
            Echo.Set "Loop_TF=%%~3"
        REM Change to the Directory you want to create the Music Launcher in.
            Echo.PUSHD %%sounds%%
        REM Ensure no Conflict with the Previous Script.
            Echo.IF exist PlayMusic.vbs ^(
            Echo.DEL PlayMusic.vbs
            Echo.^)
        REM Creates a vbs Script to Launch the music (Occurs without any visual indication or prompting)
            Echo.^( echo Set Sound = CreateObject^("WMPlayer.OCX.7"^^^)
            Echo.echo Sound.URL = "%%MusicPath%%"
            Echo.echo Sound.settings.volume = %%vol%%
            Echo.echo Sound.settings.setMode "loop", %%Loop_TF%%
            Echo.echo Sound.Controls.play
            Echo.echo While Sound.playState ^^^<^^^> 1
            Echo.echo      WScript.Sleep 100
            Echo.echo Wend
            Echo.^)^>PlayMusic.vbs
            Echo.start /min PlayMusic.vbs
        ::: Return to the Previous Directory
            Echo.POPD
        ::: Exit the Launcher and return to Previous batch program.
            Echo.Goto :EOF
        )>%Player%
        Exit /B
        
        :makemonitor
        (
        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 "%MusicStopper%", 0, true
        )>"%Monitor%"
        Exit /B
        
        :makestopper
        (
        Echo.@ECHO OFF
        Echo.taskkill /pid WScript.exe /f /t ^>nul
        Echo.Goto :EOF
        )>%MusicStopper%
        Exit /B
        
        :end
        exit
        

        【讨论】:

          【解决方案10】:

          如果您可以使用第三方实用程序,那么wv_player 是一个免费的媒体播放器,它有一个简单的 gui 并且有命令行开关来播放媒体文件而没有界面。

          【讨论】:

            【解决方案11】:

            最推荐的是 MediaPlayer 或相关的 ActiveX object 。对于没有安装 MediaPlayer 的人来说,这可能是个问题(例如,Windows XP 需要正版身份验证才能安装它),并且它在不同的 Windows 版本上的行为可能不同(例如,在某些 Windows 版本上,自动关闭无法按预期工作)。 Here's my implementation(不创建临时文件)。示例:

            call mediaRunner.bat "C:\Windows\Media\Ring05.wav"
            

            在每台 Windows 机器上都安装了 SP ActiveX 对象,这些对象能够运行 .wav 文件(没有 mp3 等)。这是one script.示例:

            call spPlayer.bat "C:\Windows\Media\Ring05.wav"
            

            我们还有 HTA/InternetExplorer 应用程序及其bgsound 标签。Which also allows you to control the volume of the played song:

            call htaplayer.bat "C:\Windows\Media\Ring05.wav" -1000
            

            【讨论】:

              【解决方案12】:

              我昨天在研究另一个主题中提出的解决方案时遇到了这个问题,因为它使 Windows Media Player 处于打开状态。从 MC ND 提供的 C 代码开始,我整理了一个稍微更精致和现代(宽字符)的版本,我刚刚在 GitHub 上根据三条款 BSD 许可证发布了它

              运行它所需的一切都在 SoundOff_Binary.ZIP 中,您可以独立下载。如果您也想要源代码,请随时将存储库克隆到本地 git。如果您这样做,请在尝试使用之前花时间阅读 README.md 文件。

              【讨论】:

                【解决方案13】:

                如果有人需要关闭音乐并播放另一个音乐。
                试试这个:

                Taskkill /IM "wscript.exe" /F>nul 2>&1
                

                (如果你使用 sound.vbs)

                【讨论】:

                • 这是一个糟糕的建议,因为它会强制操作系统残酷地杀死 所有 正在运行的 Windows 脚本宿主 实例。 %SystemRoot%\System32\taskkill.exe 可以使用 without 选项 /F 优雅地终止可执行文件。但是还需要找出哪个 wscript.exe 进程当前正在播放音乐并终止(而不是杀死)wscript.exe 的这个实例。可能会偶然运行其他 wscript.exe 进程做一些不同的事情。所以杀死所有 wscript.exe 当前正在运行的进程是不好的。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2017-09-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多