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

树莓派3通用应用中HidDevice.FromIdAsync返回null,已识别Makey Makey

解决HidDevice.FromIdAsync返回null的问题(Makey Makey + Windows树莓派3)

我之前在Windows设备上碰到过一模一样的问题,大多是权限或者配置环节出了问题,给你几个具体的排查和解决步骤:

1. 先检查应用的Package.appxmanifest权限声明

这是最常见的触发原因!通用Windows应用必须明确声明要访问的HID设备权限,你需要在Package.appxmanifest里添加对应的DeviceCapability,指定Makey Makey的VID和PID(就是你识别到的VID_2A66&PID_0001),还要匹配它的HID用途(Makey Makey模拟键盘,对应usage page 1,usage ID 6)。

把这段XML代码添加到你的manifest的<Capabilities>节点下:

<DeviceCapability Name="humaninterfacedevice">
  <Device Id="vidpid:2A66 0001">
    <Function Type="usage:1 6" />
  </Device>
</DeviceCapability>

2. 确认系统层面的设备访问权限

有时候就算manifest声明了权限,系统也可能没给应用授权:

  • 打开Windows设置 → 隐私和安全性 → 设备权限,确保你的应用有访问HID设备的权限
  • 如果是Windows IoT Core系统,还要登录树莓派的设备门户,检查设备是否允许应用访问外部硬件

3. 验证FromIdAsync的调用方式是否正确

你要确保传入的设备ID格式正确,并且正确使用异步方法和访问模式。比如:

using System.Runtime.InteropServices;
using Windows.Devices.HumanInterfaceDevice;
using Windows.Devices.Enumeration;

// 替换成你识别到的那个设备Id
string targetDeviceId = @"\?\HID#VID_2A66&PID_0001&MI_00&Col01#7&2d913a22&0&0000#{884b96c3-56ef-11d1-bc8c-00a0c91405dd}";

HidDevice makeyDevice = await HidDevice.FromIdAsync(targetDeviceId, FileAccessMode.ReadWrite);

if (makeyDevice == null)
{
    // 获取错误码快速定位问题,非常实用
    int errorCode = Marshal.GetLastWin32Error();
    Debug.WriteLine($"调用失败,错误码:{errorCode}");
    // 比如错误码5是权限不足,2是找不到设备,根据错误码对应排查
}

注意:一定要用await等待异步调用完成,指定合适的FileAccessMode,另外不要遗漏Marshal.GetLastWin32Error(),它能帮你快速区分是权限、设备不存在还是被占用的问题。

4. 排查设备被占用的情况

Makey Makey默认会被系统识别为键盘,系统自带的键盘驱动可能会占用设备,导致你的应用无法获取访问权。可以临时在设备管理器里禁用Makey Makey对应的键盘设备,然后重新运行应用测试,如果能成功打开,就说明是这个原因。测试完记得重新启用驱动,不然系统没法用它当键盘。

5. 确认系统版本兼容性

树莓派3上的Windows版本至少要Windows 10 1511(10.0.10586)以上,HidDevice API才被支持。如果你的系统版本太老,升级系统后再试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:37:17