gpt4 book ai didi

c++ - Logitech B100 鼠标的 HidD_GetAttributes 失败

转载 作者:太空宇宙 更新时间:2023-11-04 14:30:59 25 4
gpt4 key购买 nike

我有两个罗技的 HID 兼容设备 (VendorID 0x046d == 1133):K120 键盘 (ProductID 0xC31C == 49948) 和 B100 鼠标 (ProductID 0xc05a == 49242)

我可以使用 HID 类支持例程成功地与键盘对话 https://msdn.microsoft.com/en-us/library/windows/hardware/ff538865(v=vs.85).aspx

虽然控制面板显示鼠标已正确安装,并且它确实可以用作鼠标,但每个 HID 类例程都返回失败。

此代码显示 HidD_GetAttributes 在键盘上工作,但在鼠标上不工作

#include <iostream>
#include <windows.h>
#include <setupapi.h>
#include <ddk/hidsdi.h>

using namespace std;

int main()
{
// get info set for all present HIDs

GUID HID_GUID;
HidD_GetHidGuid( & HID_GUID );
HDEVINFO DeviceInfoSet = SetupDiGetClassDevs(
&HID_GUID,
NULL,NULL,
DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);

SP_DEVICE_INTERFACE_DATA DeviceInfoData;
DeviceInfoData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
int DeviceIndex = 0;

// loop over present HIDs
while ( SetupDiEnumDeviceInterfaces(
DeviceInfoSet,
NULL,
&HID_GUID,
DeviceIndex,
&DeviceInfoData))
{
DeviceIndex++;


//Get the details with null values to get the required size of the buffer
PSP_INTERFACE_DEVICE_DETAIL_DATA deviceDetail;
ULONG requiredSize = 0;
SetupDiGetDeviceInterfaceDetail (DeviceInfoSet,
&DeviceInfoData,
NULL, //interfaceDetail,
0, //interfaceDetailSize,
&requiredSize,
0); //infoData))

//Allocate the buffer
deviceDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(requiredSize);
deviceDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);

//Fill the buffer with the device details
if (!SetupDiGetDeviceInterfaceDetail (DeviceInfoSet,
&DeviceInfoData,
deviceDetail,
requiredSize,
&requiredSize,
NULL))
{
cout << "SetupDiGetDeviceInterfaceDetail failed";
continue;
}

// open the HID handle
string myPath = deviceDetail->DevicePath;
HANDLE myHandle = CreateFile(myPath.c_str(),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if( ! myHandle )
{
cout << "Create File failed";
continue;
}

// get attributes of HID
int myVendorID;
int myProductID;
_HIDD_ATTRIBUTES attributes;
attributes.Size = sizeof( _HIDD_ATTRIBUTES );
if( HidD_GetAttributes(
myHandle,
&attributes ) )
{
myVendorID = attributes.VendorID;
myProductID = attributes.ProductID;
}
else
{
// failure
myVendorID = -1;
myProductID = -1;
}

// display logitech devices
if( myPath.find("vid_046d") != -1 )
cout << myPath.substr(0,30) << "... VID: " << myVendorID
<< " PID " << myProductID << endl << endl;

}

return 0;
}

输出是:

\\?\hid#vid_046d&pid_c05a#7&be... VID: -1 PID -1\\?\hid#vid_046d&pid_c31c&mi_0... VID: 1133 PID 49948\\?\hid#vid_046d&pid_c31c&mi_0... VID: 1133 PID 49948\\?\hid#vid_046d&pid_c31c&mi_0... VID: 1133 PID 49948\\?\hid#vid_046d&pid_c31c&mi_0... VID: -1 PID -1

为什么我不能访问鼠标?

最佳答案

这几天我一直在为这个问题苦苦挣扎。我相信这与 Windows opening mice and keyboards in exclusive mode 有关.

我发现我的几个键盘似乎可以工作,但只是因为除了“真实”描述符之外,它们还公开了不是鼠标/键盘的 HID 端点。

您还可以通过使用 SetupDiGetDeviceRegistryProperty 获取 SPDRP_DEVICEDESC 属性来确认这一点.对于我的系统,所有的红鲱鱼都是符合 HID 标准的设备或系统 Controller ,而故障都是符合 HID 标准的鼠标或键盘。

尝试以模式 0(而不是通用读/写)打开文件。然后这些功能对我有用。

关于c++ - Logitech B100 鼠标的 HidD_GetAttributes 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32338650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com