如何通过Electron、NPM或CLI工具获取电脑当前播放媒体信息?
实现类似旧版Windows媒体弹窗的方案
针对你开发的显示当前播放媒体名称、封面的Electron应用需求,以下是可落地的实现思路:
Windows平台核心方案
Windows系统原生的System Media Transport Controls (SMTC) 是获取媒体信息的关键,以下几种方式都能实现:
1. Electron集成原生API调用
- 用
ffi-napi或win32-api这类NPM库,直接调用Windows系统DLL封装的SMTC接口,获取当前媒体会话的标题、艺术家、封面URI等数据。 - 若不想手动封装,可尝试基于
windows-media-session这类轻量NPM包扩展,它已封装了SMTC的基础功能。
2. CLI/PowerShell辅助
通过Electron的child_process模块执行PowerShell命令,快速获取媒体信息:
$session = Get-SystemMediaTransportControlsSession; if ($session) { $session.GetMediaProperties() | ConvertTo-Json }
返回的JSON数据包含完整媒体属性,其中封面URI多为ms-appx://或file://格式,可直接转换为Electron能加载的图片路径。
3. 第三方工具适配
参考你提到的壁纸引擎媒体集成逻辑,它本质也是调用SMTC接口。你可以逆向其逻辑,或基于同类工具的实现思路做适配,原生方案更能保证稳定性。
跨平台扩展(可选)
如果需要支持macOS/Linux:
- macOS:通过
child_process执行AppleScript,获取主流播放器(Spotify、Safari等)的播放信息:
tell application "Spotify" to get {name, artist, album artwork url} of current track
- Linux:基于MPRIS规范,使用
mpris-clientNPM包或mpris-ctlCLI工具,获取桌面环境下的媒体播放数据。
弹窗UI实现
在Electron中创建模拟旧版Windows音量弹窗的窗口:
- 配置BrowserWindow参数:
frame: false(无边框)、alwaysOnTop: true(置顶)、transparent: true(可选半透明)。 - 监听媒体信息变化,实时更新窗口内的标题文本和封面图片。
- 添加自动隐藏逻辑,比如检测到媒体暂停或无操作3秒后调用
window.hide()。
内容的提问来源于stack exchange,提问作者wreper 12
相关产品推荐
相关产品推荐

