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

调用GetSystemMetrics(SM_MOUSEHORIZONTALWHEELPRESENT)始终返回0的问题求助

GetSystemMetrics(SM_MOUSEHORIZONTALWHEELPRESENT)返回0但鼠标实际支持水平滚轮的解决方案

问题原因

GetSystemMetrics(SM_MOUSEHORIZONTALWHEELPRESENT)返回的是系统级的水平滚轮支持状态,而非当前连接的单个鼠标设备的硬件能力。即使你的鼠标硬件具备水平滚轮,如果系统未全局启用该功能、驱动未正确适配,或者该API的检测逻辑未识别到设备的水平滚轮属性,就会返回0。而你通过原始输入(Raw Input)获取的fHasHorizontalWheel == TRUE是单个设备的硬件属性,这两者的检测维度不同。

解决办法

  • 直接基于原始输入结果判断:既然你已经能通过原始输入API拿到设备的fHasHorizontalWheel字段,完全可以用这个值来判断当前设备是否支持水平滚轮,这是最准确的方式。示例代码片段:
    // 枚举原始输入设备时的检测逻辑
    RID_DEVICE_INFO_MOUSE mouseInfo = {0};
    mouseInfo.cbSize = sizeof(RID_DEVICE_INFO_MOUSE);
    if (GetRawInputDeviceInfo(hDevice, RIDI_DEVICEINFO, &mouseInfo, &cbSize) != -1) {
        if (mouseInfo.fHasHorizontalWheel) {
            // 当前设备支持水平滚轮
        }
    }
    
  • 检查系统与驱动状态:
    • 重新安装或更新鼠标官方驱动,确保驱动正确识别水平滚轮功能;
    • 打开控制面板的「鼠标」设置,确认水平滚轮的相关选项已启用;
    • 尝试重启系统,让设备驱动和系统设置生效。
  • 验证API调用正确性:确认调用GetSystemMetrics时参数无误,SM_MOUSEHORIZONTALWHEELPRESENT的宏定义值为0x0064,避免因参数传错导致返回值异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:40:58