HID 程序设计

    技术2022-05-11  100

    1 环境配置 1.1 安装NTDDK 1.2 设置VC++6.0的配置 工具 ->选择->目录 1.3 程序引用 #include <windows.h>   extern "C" { #include <hidsdi.h> #include <hidpi.h> #include <setupapi.h> }   #pragma comment(lib,"setupapi.lib") #pragma comment(lib,"hid.lib")   不加 #include <windows.h>的后果: c:/program files/microsoft visual studio/vc98/include/rpcndr.h(58) : fatal error C1189: #error : incorrect <rpcndr.h> version. Use the header that matches with the MIDL compiler. 不加 extern “C” {}的后果: 编译通过,构造出错, hid.obj : error LNK2001: unresolved external symbol "void __stdcall HidD_GetHidGuid(struct _GUID *)" (?HidD_GetHidGuid@@YGXPAU_GUID@@@Z) Debug/hid.exe : fatal error LNK1120: 1 unresolved externals 不加 #pragma comment(lib,"hid.lib") 的后果:hid.obj : error LNK2001: unresolved external symbol _HidD_GetHidGuid@4       代码 /*名称:GetDevPath  功能:获取设备路径  参数:MemberIndex 设备列表的索引,txtpath文本缓存,以字符串保存设备路径  返回:-2表示结束,-1 表示不能获取GUID,0表示未找到设备,>0表示成功,且返回值为路径字符串长度 */ int HidDevice::GetDevPath(DWORD MemberIndex,char *txtpath) {     int    ret;     DWORD Length,Required;         //获GUID     HidD_GetHidGuid(&HidGuid);     hDevInfo=SetupDiGetClassDevs(&HidGuid,NULL,NULL,DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);     if (hDevInfo == INVALID_HANDLE_VALUE)     {        return -1;     }     //枚举设备     ret=SetupDiEnumDeviceInterfaces(hDevInfo,0,&HidGuid,MemberIndex,&devInfoData);     if (!ret)        if(MemberIndex==1)        {        // MessageBox(NULL,"未找到任何可用USB设备!",NULL,NULL);            return 0;        }        else            return -2;     //获detaildata结构数组的长度     SetupDiGetDeviceInterfaceDetail(hDevInfo,&devInfoData,NULL,0,&Length,NULL);     detailData=(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length);     detailData->cbSize=sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);     //获detailData     ret=SetupDiGetDeviceInterfaceDetail(hDevInfo,&devInfoData,detailData,Length,&Required,NULL);     strcpy(txtpath,detailData->DevicePath);       return strlen(txtpath); } /*名称:GetProductInfo  功能:获取usb的hid设备的信息  参数:vendorid供应商,productid产品id,vernum版本号,manufaturer制造商,产品  返回:1 */ int HidDevice::GetProductInfo(char *vendorid,char *productid,char *vernum,char *manufaturer,char *product) {     HANDLE        hDeviceHandle;     HIDD_ATTRIBUTES Attributes;     WCHAR         mString[256];       hDeviceHandle = CreateFile(detailData->DevicePath ,                             GENERIC_READ | GENERIC_WRITE,                             FILE_SHARE_READ | FILE_SHARE_WRITE,                             NULL,                             OPEN_EXISTING,                             0,                             NULL);     if(hDeviceHandle == INVALID_HANDLE_VALUE)        return 0;     HidD_GetAttributes(hDeviceHandle,&Attributes);     //将有关该设备的标识显示出来     sprintf(vendorid,"0xX",Attributes.VendorID);     sprintf(productid,"0xX",Attributes.ProductID);     sprintf(vernum,"0xX",Attributes.VersionNumber);     HidD_GetManufacturerString(hDeviceHandle,mString,sizeof(mString));     if (wcstombs(manufaturer,mString,256) == -1) // fail        manufaturer[0] = NULL;     HidD_GetProductString(hDeviceHandle,mString,sizeof(mString));     if (wcstombs(product,mString,256) == -1)            product[0] = NULL;       CloseHandle(hDeviceHandle);     return 1; }

    最新回复(0)