

uj5u.com熱心網友回復:
為什么沒有VID=04B4,PID=DB30這個usb設備啊uj5u.com熱心網友回復:
PSP_DEVICE_INTERFACE_DETAIL_DATA HID_FindDevices(USHORT V_ID, USHORT P_ID, unsigned short *FIFO_Length);
int main()
{
USHORT VID = 0x04B4;
USHORT PID = 0xDB30;
unsigned short *FIFO_Length=0;
HDEVINFO m_USB;
PSP_DEVICE_INTERFACE_DETAIL_DATA DevDetail;
DevDetail = HID_FindDevices(VID, PID, FIFO_Length);
if (DevDetail == NULL)
{
std::cout << "獲取設備失敗!" << endl;
}
else
{
m_USB= CreateFile(DevDetail->DevicePath,
GENERIC_READ | GENERIC_WRITE,
0,
(LPSECURITY_ATTRIBUTES)NULL,
OPEN_EXISTING,
0x40000000,
NULL
);
if (m_USB == INVALID_HANDLE_VALUE)
{
std::cout << "打開失敗!" << endl;
}
else
{
std::cout << "打開成功!" << endl;
}
CloseHandle(m_USB);
}
return 0;
}
PSP_DEVICE_INTERFACE_DETAIL_DATA HID_FindDevices(USHORT V_ID, USHORT P_ID, unsigned short *FIFO_Length)
{
GUID HidGuid= { 0x36fc9e60,0xc465 ,0x11cf ,0x8056,0x444553540000 };
//HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\DeviceClasses\{a5dcbf10 - 6530 - 11d2 - 901f - 00c04fb951ed}
GUID HidGuid2 = { 0xa5dcbf10, 0x6530, 0x11d2, 0x90, 0x1f, 0x00, 0xc0, 0x4f, 0xb9, 0x51, 0xed };
HDEVINFO DevInfo;
HIDD_ATTRIBUTES DevAttributes;
SP_DEVICE_INTERFACE_DATA DevData;
PSP_DEVICE_INTERFACE_DETAIL_DATA DevDetail;
PHIDP_PREPARSED_DATA PreparsedData;
HIDP_CAPS Capabilities;
ULONG Length;
int Index;
DWORD k ;
BOOL ok;
HANDLE DevHandle;
int DevCount = 0;
/* Get GUID for all System HIDs */
//HidD_GetHidGuid(&HidGuid);
/* Get Device Information for all present devices */
DevInfo = SetupDiGetClassDevs(&HidGuid2,
NULL,
NULL,
(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)
);
k = GetLastError();
if (DevInfo == NULL)
{
std::cout << "獲取設備集k=" << k << endl;
}
DevData.cbSize = sizeof(DevData);
DevDetail = NULL;
Index = -1;
//*FIFO_Length = 0;
/* Scan all Devices */
do {
Index++;
/* Device Interface Element of a Device Information set */
ok = SetupDiEnumDeviceInterfaces(DevInfo,
0,
&HidGuid2,
Index,
&DevData
);
k=GetLastError();
std::cout << "k=" <<k<< endl;
if (!ok) break;
/* Get Device Interface Details - Get Length */
ok = SetupDiGetDeviceInterfaceDetail(DevInfo,
&DevData,
NULL,
0,
&Length,
NULL
);
/* Allocate memory for Device Detailed Data */
DevDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length);
/* Set cbSize in the DevDetail structure */
DevDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
/* Get Device Interface Details */
ok = SetupDiGetDeviceInterfaceDetail(DevInfo,
&DevData,
DevDetail,
Length,
NULL,
NULL
);
if (!ok)
{
free(DevDetail);
DevDetail = NULL;
continue;
}
/* Create File for Device Read/Write */
DevHandle = CreateFile(DevDetail->DevicePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
(LPSECURITY_ATTRIBUTES)NULL,
OPEN_EXISTING,
0,
NULL
);
if (DevHandle == INVALID_HANDLE_VALUE)
{
std::cout << "打開失敗!" << endl;
free(DevDetail);
DevDetail = NULL;
continue;
}
std::cout << "打開成功!" << endl;
DevAttributes.Size = sizeof(DevAttributes);
ok = HidD_GetAttributes(DevHandle, &DevAttributes);
if (!ok)
{
k = GetLastError();
std::cout << "HidD_GetAttributesk=" << k << endl;
free(DevDetail);
CloseHandle(DevHandle);
DevDetail = NULL;
continue;
}
std::cout << "VID=" << DevAttributes.VendorID <<endl;
std::cout << "PID=" << DevAttributes.ProductID << endl;
if (DevAttributes.VendorID != V_ID || DevAttributes.ProductID != P_ID)
{
free(DevDetail);
CloseHandle(DevHandle);
DevDetail = NULL;
continue;
}
/* Get Preparsed Data */
ok = HidD_GetPreparsedData(DevHandle, &PreparsedData);
if (!ok)
{
free(DevDetail);
CloseHandle(DevHandle);
DevDetail = NULL;
continue;
}
/* Get Device's Capabilities */
/*HidP_GetCaps(PreparsedData, &Capabilities);
*FIFO_Length = Capabilities.InputReportByteLength;*/
CloseHandle(DevHandle);
break;
} while (DevCount < 20);
SetupDiDestroyDeviceInfoList(DevInfo);
return DevDetail;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/27632.html
標籤:C++ 語言
上一篇:MFC程式運行后成功,但是點擊功能的時候報錯:遇到不適當的引數,這是什么原因造成的
下一篇:重定義為什么不報錯
