可在程序运行时禁用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
相关产品推荐
相关产品推荐

