我有一个问题,我似乎无法将 GetRawInputDeviceInfo 与 RIDI_DEVICEINFO 结合使用(以尝试检索 RID_DEVICE_INFO)根本不起作用。
我从函数返回错误-1,这应该意味着没有足够的空间来存储 RID_DEVICE_INFO,我已经尝试将其增加到所需的更多但效果相同。
我使用了以下 DLLImports :
[DllImport("User32.dll")]
extern static uint GetRawInputDeviceInfo(IntPtr hDevice, uint uiCommand, IntPtr pData, ref uint pcbSize);
[DllImport("User32.dll")]
unsafe extern static uint GetRawInputDeviceInfo(IntPtr hDevice, uint uiCommand, IntPtr pData, IntPtr pcbSize);
两者都没有结果,但是当我使用 RIDI_DEVICENAME 尝试这些时,它们都可以正常工作。在这种情况下,我这样调用函数:
首先获取尺寸:GetRawInputDeviceInfo(rid.hDevice, RIDI_DEVICENAME, IntPtr.Zero, pSize);
接着 :GetRawInputDeviceInfo(rid.hDevice, RIDI_DEVICENAME, pData, pSize);
得到名字。两者都工作正常,但是当我这样调用函数时:
int intReturn = (int)GetRawInputDeviceInfo(rid.hDevice, RIDI_DEVICEINFO, IntPtr.Zero, pInfoSize);
intReturn = (int)GetRawInputDeviceInfo(rid.hDevice, RIDI_DEVICEINFO, pInfoData, pInfoSize);
然后首先我将 0 放入 intReturn 并且也可以获得正确的大小,但随后我将 -1 放入 return,当我执行 PtrToStructure 时,它只会返回错误且看似随机的值。
另外,当我在那之后执行 GetLastWin32Error() 时,它有时会返回 1008 或 87 ,这对我来说似乎也没有任何逻辑,因为我看不出我可能在哪里设置了错误的参数。
我将 RIDI_DEVICENAME 和 RIDI_DEVICEINFO 定义为:
internal const uint RIDI_DEVICENAME = 0x20000007;
internal const uint RIDI_DEVICEINFO = 0x2000000b;
任何人都可以帮助解决这个问题或向我展示 GetRawInputDeviceInfo 的工作 C# 示例吗?
谢谢,彼得