寻求可在Node应用中运行的System Media Controls访问方案
Windows平台优先的Node.js系统媒体状态获取与控制方案
可用核心方案
推荐直接使用原生Node模块winrt-media,该模块直接对接Windows Runtime的全局媒体会话API,无额外依赖,可直接在Node项目中集成,完全满足现阶段Windows平台的适配需求。
功能覆盖情况
- 可读取所有系统活动媒体会话的元数据,包括媒体标题、艺术家、专辑等信息,覆盖所有主流播放应用(Chrome/Edge/Spotify/网易云音乐等)
- 可直接获取媒体会话的实时播放状态,返回
playing/paused/stopped三种明确状态 - 原生支持播放、暂停、切歌、调整播放进度等控制操作,无需依赖模拟按键实现,不受当前窗口焦点影响,稳定性远高于robot.js方案
基础使用示例
const { MediaSessionManager } = require('winrt-media'); async function getMediaInfo() { // 获取系统当前所有活动媒体会话 const sessions = await MediaSessionManager.getSessions(); if (!sessions.length) return console.log('无正在播放的媒体'); const currentSession = sessions[0]; // 获取媒体元数据 const metadata = currentSession.mediaProperties; console.log('当前播放标题:', metadata.title); // 获取播放状态 const status = currentSession.playbackStatus; console.log('播放状态:', status === 'playing' ? '播放中' : status === 'paused' ? '已暂停' : '已停止'); // 原生控制示例:暂停播放 await currentSession.controls.pause(); } getMediaInfo();
无原生模块的替代方案
如果不想引入原生Node模块,可自行开发极简C#控制台程序,调用Windows.Media.Control命名空间下的API获取媒体信息后序列化为JSON输出到stdout,Node侧通过child_process.exec调用该可执行文件解析输出结果即可,无需额外依赖,兼容性更强。
后续跨平台扩展参考
如果后续需要适配Linux和macOS,可对应选择平台原生方案:
- macOS:调用系统NowPlaying框架的封装模块,或使用独立命令行工具输出stdout读取状态
- Linux:基于D-Bus的MPRIS接口实现媒体状态读取与控制,有成熟的Node封装模块可用
内容的提问来源于stack exchange,提问作者Timmo
相关产品推荐
相关产品推荐

