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

NodeJS:如何在Windows系统触发媒体暂停/播放键

模拟媒体暂停/播放按键的可行方案

1. 修复RobotJS的使用问题

RobotJS对媒体键的支持需要使用正确的键名,你之前用的mediaplaypause不符合要求,可尝试audio_play或playpause。示例代码:

const robot = require("robotjs");
robot.keyTap("audio_play");

如果仍报错,可直接使用Windows系统下媒体播放/暂停的虚拟键码0xB3:

// 直接发送键码的方式
robot.keyTap("", "audio_play");

2. 调整Windows版xdotool的命令

你使用的Windows版xdotool不支持Linux环境的XF86AudioPlay键名,需替换为Windows对应的虚拟键码:

xdotool key 0xB3

也可以改用Windows原生PowerShell命令,兼容性更好:

Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
public class Keyboard {
    [DllImport("user32.dll")]
    public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
}
"@
[Keyboard]::keybd_event(0xB3, 0, 0, [UIntPtr]::Zero)
[Keyboard]::keybd_event(0xB3, 0, 2, [UIntPtr]::Zero)

将这段命令通过exec调用,即可模拟按下再松开媒体播放键的完整动作。

3. 使用专门的Node.js媒体键库

推荐使用node-media-keys库,它会自动适配不同系统的底层实现,无需手动处理键码:

const mediaKeys = require('node-media-keys');
mediaKeys.playPause();

4. 直接调用Windows原生API(进阶)

如果以上方法都无效,可通过ffi-napi调用Windows的keybd_event函数:

const ffi = require('ffi-napi');

const user32 = ffi.Library('user32', {
  'keybd_event': ['void', ['byte', 'byte', 'uint', 'pointer']]
});

const VK_MEDIA_PLAY_PAUSE = 0xB3;
const KEYEVENTF_KEYUP = 0x0002;

// 按下按键
user32.keybd_event(VK_MEDIA_PLAY_PAUSE, 0, 0, null);
// 延迟后松开按键
setTimeout(() => {
  user32.keybd_event(VK_MEDIA_PLAY_PAUSE, 0, KEYEVENTF_KEYUP, null);
}, 100);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:55:19