#include <Windows.h>
extern "C" {
#include "setupapi.h"
#include "hidsdi.h"
}
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define venderID 0x0849
#define productID 0x5250
int WJOpenDevice(HANDLE *handle)
{
SP_DEVINFO_DATA DeviceInfoData;
SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData;
int Count = 0;
BOOL result1 = false;
BOOL result2 = false;
DWORD strSize = 0;
DWORD requiredSize = 0;
char devPath[128];
memset(devPath, 0, sizeof(devPath));
GUID deviceID;
HidD_GetHidGuid(&deviceID);
HDEVINFO devinfo;
devinfo = SetupDiGetClassDevs(&deviceID, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
do
{
DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
result1 = SetupDiEnumDeviceInterfaces(devinfo, NULL, &deviceID, Count, &DeviceInterfaceData);
if(result1 == false)
{
return -1;
}
SetupDiGetDeviceInterfaceDetail(devinfo, &DeviceInterfaceData, NULL, 0, &strSize, NULL);
requiredSize = strSize;
DeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredSize);
DeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
result2 = SetupDiGetDeviceInterfaceDetail(devinfo, &DeviceInterfaceData, DeviceInterfaceDetailData, strSize, &requiredSize, &DeviceInfoData);
if(result2 == false)
{
Count++;
continue;
}
strcpy(devPath, DeviceInterfaceDetailData->DevicePath);
HIDD_ATTRIBUTES devAttr;
PHIDP_PREPARSED_DATA PreparsedData;
HIDP_CAPS Capabilities;
*handle = CreateFile(devPath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, NULL);
if(*handle == INVALID_HANDLE_VALUE)
{
Count++;
continue;
}
devAttr.Size = sizeof(HIDD_ATTRIBUTES);
if(!HidD_GetAttributes(*handle, &devAttr))
{
CloseHandle(*handle);
return -2;
}
if(!HidD_GetPreparsedData(*handle, &PreparsedData))
{
CloseHandle(*handle);
return -3;
}
if(!HidP_GetCaps(PreparsedData, &Capabilities))
{
CloseHandle(*handle);
return -4;
}
if(devAttr.VendorID == venderID && devAttr.ProductID == productID)
{
printf("Find the Device!");
//找到你的设备了,该干嘛干嘛吧
return 0;
}
Count++;
}while(result1);
return -5;
}
int main()
{
HANDLE handle;
int ret = WJOpenDevice(&handle);
return 0;
}