You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程方式向Windows Media Player播放列表添加音乐?

向运行中的Windows Media Player 12添加媒体文件

问题背景

我编写了一个小型Python脚本,可启动Windows Media Player并播放动态生成的、满足随机选择且时长固定要求的音乐文件列表,目前运行正常。启动命令为:
wmplayer.exe file1.mp3 file2.mp3 /Task MediaLibrary

对应的Python代码:

import subprocess

wmplayer_path = "C:\\Program Files (x86)\\Windows Media Player\\wmplayer.exe"
playlist = ["file1.mp3", "file2.mp3"]  # 示例动态生成列表

subprocess.Popen(
    [
        wmplayer_path,
        *playlist,
        "/Task",
        "MediaLibrary",
    ],
    stdin=None,
    stdout=None,
    stderr=None,
)

现在需要在播放器运行时向现有播放列表添加更多音乐,但尝试官方命令行参数及未公开的/Enqueue选项均无效。UI中右键菜单的“Add to Windows Media Player list”可实现该操作,但需通过编程(CLI或Python/C# API)方式解决,当前环境为Windows 10 Pro 64位、WMP 12。

解决方案

1. 使用Windows Media Player COM API(推荐)

WMP提供了COM接口,可直接操控运行中的实例,这是最可靠的追加方式。

Python实现(依赖pywin32库)

首先安装依赖:
pip install pywin32

代码示例:

import win32com.client

def add_to_wmp_playlist(file_path):
    try:
        # 获取已运行的WMP实例
        wmp = win32com.client.GetActiveObject("WMPlayer.OCX.7")
        # 获取当前播放列表并追加媒体文件
        current_playlist = wmp.currentPlaylist
        media_item = wmp.newMedia(file_path)
        current_playlist.appendItem(media_item)
        print(f"已添加文件: {file_path}")
    except Exception as e:
        print(f"添加失败: {str(e)}")

# 单个文件添加调用
add_to_wmp_playlist("C:\\music\\new_track.mp3")

# 批量添加示例
def bulk_add_to_wmp(file_paths):
    try:
        wmp = win32com.client.GetActiveObject("WMPlayer.OCX.7")
        current_playlist = wmp.currentPlaylist
        for path in file_paths:
            media_item = wmp.newMedia(path)
            current_playlist.appendItem(media_item)
        print(f"已批量添加 {len(file_paths)} 个文件")
    except Exception as e:
        print(f"批量添加失败: {str(e)}")

bulk_add_to_wmp(["C:\\music\\track1.mp3", "C:\\music\\track2.mp3"])

C#实现

首先添加COM引用:右键项目 → 添加引用 → COM → 选择"Windows Media Player"。

代码示例:

using WMPLib;

public static void AddToWmpPlaylist(string filePath)
{
    try
    {
        // 获取运行中的WMP实例
        WindowsMediaPlayer wmp = (WindowsMediaPlayer)System.Runtime.InteropServices.Marshal.GetActiveObject("WMPlayer.OCX.7");
        IWMPPlaylist currentPlaylist = wmp.currentPlaylist;
        IWMPMedia media = wmp.newMedia(filePath);
        currentPlaylist.appendItem(media);
        System.Console.WriteLine($"已添加文件: {filePath}");
    }
    catch (System.Exception ex)
    {
        System.Console.WriteLine($"添加失败: {ex.Message}");
    }
}

// 调用示例
AddToWmpPlaylist(@"C:\music\new_track.mp3");

// 批量添加示例
public static void BulkAddToWmp(System.Collections.Generic.List<string> filePaths)
{
    try
    {
        WindowsMediaPlayer wmp = (WindowsMediaPlayer)System.Runtime.InteropServices.Marshal.GetActiveObject("WMPlayer.OCX.7");
        IWMPPlaylist currentPlaylist = wmp.currentPlaylist;
        foreach (string path in filePaths)
        {
            IWMPMedia media = wmp.newMedia(path);
            currentPlaylist.appendItem(media);
        }
        System.Console.WriteLine($"已批量添加 {filePaths.Count} 个文件");
    }
    catch (System.Exception ex)
    {
        System.Console.WriteLine($"批量添加失败: {ex.Message}");
    }
}

2. CLI替代方案(临时播放列表文件)

若不想使用COM API,可生成包含现有列表+新文件的WPL格式临时播放列表,再让WMP加载。但此方式会替换当前播放列表,而非追加:

生成临时WPL文件(示例内容):

<?wpl version="1.0"?>
<smil>
    <head>
        <meta name="Generator" content="Windows Media Player"/>
        <title>临时播放列表</title>
    </head>
    <body>
        <seq>
            <!-- 现有播放列表中的文件 -->
            <media src="C:\music\existing1.mp3"/>
            <media src="C:\music\existing2.mp3"/>
            <!-- 要添加的新文件 -->
            <media src="C:\music\new1.mp3"/>
            <media src="C:\music\new2.mp3"/>
        </seq>
    </body>
</smil>

运行命令加载:
wmplayer.exe /Open "C:\temp\temp_playlist.wpl"

注意事项

  • 使用COM API时,需确保WMP已处于运行状态,否则GetActiveObject会报错;若需处理未运行场景,可先启动WMP再执行追加操作。
  • 传递给COM接口的文件路径必须为绝对路径,不支持相对路径。
  • Windows 10 Pro 64位环境下的WMP 12完全兼容上述COM接口,无需额外配置。

内容的提问来源于stack exchange,提问作者akinuri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:36:34