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

Windows 11下SendInput发送VK_MEDIA_PLAY_PAUSE虚拟键无效问题

问题原因

这是Windows 11对媒体按键模拟的兼容性规则变更导致的:音量调整类按键的权限限制更宽松,但是播放暂停类媒体按键的触发需要满足额外的条件,系统会过滤不符合规则的模拟输入事件。

解决方法

  • 增加按键按下和抬起的时间间隔
    你当前的代码是按下按键后立刻触发抬起,Win11输入栈大概率会把这种极短的按键事件判定为误触发直接过滤,可在两次SendInput调用之间加10~50毫秒的延时:
    input.ki.dwFlags = 0; // 0 for key press
    auto x = SendInput(1, &input, sizeof(INPUT));
    Sleep(20); // 新增20ms延时
    input.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
    x = SendInput(1, &input, sizeof(INPUT));
    
  • 改用扫描码模式发送输入
    部分Win11版本对虚拟键模式的媒体按键模拟拦截更严格,可切换为扫描码模式发送输入,修改KEYBDINPUT初始化逻辑即可:
    KEYBDINPUT kbi;
    kbi.wVk = 0; // 虚拟键值设为0
    kbi.dwFlags = KEYEVENTF_SCANCODE; // 开启扫描码模式
    kbi.time = 0;
    kbi.dwExtraInfo = (ULONG_PTR)GetMessageExtraInfo();
    
    各类媒体按键对应的扫描码参考:
    • 播放暂停:0xE2
    • 下一曲:0x99
    • 上一曲:0x90
    • 音量加:0x80
    • 音量减:0x81
  • 排查系统侧设置问题
    先手动按物理键盘上的播放暂停按键,确认系统可以正常响应,排除没有设置默认媒体应用、没有正在运行的支持媒体控制的程序这类系统设置问题。
  • 调整程序运行权限
    如果你的程序是用管理员权限运行的,部分UWP应用的媒体控制接口不会响应高权限进程发送的模拟输入,可尝试不加管理员权限直接运行程序测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:54:02