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

可在程序运行时禁用Windows Filter Keys弹窗的相关API是什么?

解决C++游戏按住Shift触发筛选键弹窗的方案

实现原理

你可以通过Windows自带的Win32 API SystemParametersInfo 临时修改筛选键的配置,游戏运行期间禁用热键触发和弹窗,退出前恢复用户原始配置即可,不会永久修改系统设置。

完整C++代码实现

1. 依赖头文件与全局变量

#include <Windows.h>

// 存储游戏启动前的系统原始筛选键配置
static FILTERKEYS g_originalFilterKeysConfig;

2. 游戏启动时调用禁用函数

// 返回值为true表示配置修改成功,false表示失败
bool DisableFilterKeysPrompt() {
    // 先读取当前系统的筛选键配置做备份
    g_originalFilterKeysConfig.cbSize = sizeof(FILTERKEYS);
    if (!SystemParametersInfoW(SPI_GETFILTERKEYS, sizeof(FILTERKEYS), &g_originalFilterKeysConfig, 0)) {
        return false;
    }

    FILTERKEYS disabledConfig = {
        .cbSize = sizeof(FILTERKEYS),
        // 清除筛选键启用标志、热键触发标志、弹窗确认标志,保留其他用户原有配置
        .dwFlags = g_originalFilterKeysConfig.dwFlags & ~(FKF_FILTERKEYSON | FKF_HOTKEYACTIVE | FKF_CONFIRMHOTKEY)
    };

    // 应用新配置,仅临时生效不写入注册表,通知系统配置更新
    return SystemParametersInfoW(SPI_SETFILTERKEYS, sizeof(FILTERKEYS), &disabledConfig, SPIF_SENDCHANGE);
}

3. 游戏退出时调用恢复函数

bool RestoreFilterKeysConfig() {
    return SystemParametersInfoW(SPI_SETFILTERKEYS, sizeof(FILTERKEYS), &g_originalFilterKeysConfig, SPIF_SENDCHANGE);
}

注意事项

  • 务必在游戏的退出逻辑中调用恢复函数,可以搭配atexit()注册恢复函数兜底,避免用户的系统筛选键配置被意外修改
  • 该操作不需要管理员权限,普通用户权限即可正常执行
  • 若游戏异常崩溃未执行恢复逻辑,用户重启电脑后系统会自动还原为原始的筛选键配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:54:03