阅读:1747回复:5
我这边有个设备属于HID类的,能否写程序获取它的信息,怎么写?
我这边有个设备属于HID类的,能否写程序获取它的信息,怎么写?
|
|
最新喜欢:cyliu |
沙发#
发布于:2005-01-28 16:49
你想获得它的什么信息?
可用hid.dll的函数,hidd_或hidp_开头的函数在应用层就可获取 |
|
|
板凳#
发布于:2005-01-28 17:15
小弟不才,请问代码如何写?
|
|
地板#
发布于:2005-02-02 13:31
如果你想获得它的VID,PID的话可以:、
#include "stdafx.h" #include <stdlib.h> #include <WINDOWS.H> #include <initguid.h> #include <SetupApi.h> //Project>Setting...>Link>Library>Add "SetupAPI.lib" #include "DeviceInterfaceClassGUID.h" int main(int argc, char* argv[]) { //得到InterfaceGUID的设备信息集合 HDEVINFO hDeviceInfo; //设备信息集合的指针 GUID InterfaceGUID; //需要访问的设备的GUID InterfaceGUID=DiskClassGuid;//就是你设备所属的类 //调用SetupDiGetClassDevs得到设备信息集合 hDeviceInfo=SetupDiGetClassDevs(&InterfaceGUID,NULL,NULL,DIGCF_DEVICEINTERFACE|DIGCF_PRESENT); //如果没有得到说明硬件没有连接好,退出程序 if (hDeviceInfo == INVALID_HANDLE_VALUE) { printf("系统中没有这种设备!n"); return false; } //得到设备信息集合完毕! int i=0; //得到设备信息集合中的第i+1个Interface的信息 while(1) { BOOL bRet; //保存函数的返回值 SP_DEVICE_INTERFACE_DATA DeviceInterfaceData; //保存Interface信息 DeviceInterfaceData.cbSize =sizeof(SP_DEVICE_INTERFACE_DATA); bRet=SetupDiEnumDeviceInterfaces(hDeviceInfo,NULL,&InterfaceGUID,i++,&DeviceInterfaceData); //如果bRet等于0,说明没有成功,释放资源,退出程序 if(!bRet) break; //下面需要得到Interface的详细信息 //先得到详细信息需要的内存大小------------------------------ DWORD RequiredSize; SetupDiGetDeviceInterfaceDetail(hDeviceInfo,&DeviceInterfaceData,NULL,0,&RequiredSize,NULL); //然后,就可以为详细信息分配内存了 PSP_INTERFACE_DEVICE_DETAIL_DATA pDeviceDetailData=NULL; pDeviceDetailData=(PSP_INTERFACE_DEVICE_DETAIL_DATA)malloc(RequiredSize); if(pDeviceDetailData==NULL) break; //可以得到Interface的详细信息了 DWORD predictLength=RequiredSize;; pDeviceDetailData->cbSize =sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA); bRet=SetupDiGetDeviceInterfaceDetail(hDeviceInfo,&DeviceInterfaceData,pDeviceDetailData,predictLength,&RequiredSize,NULL); if(!bRet) break; //pDeviceDetailData->DevicePath保存着设备的路径名 //我们通过它把非USB的设备过滤掉,如果是手机,需要修改 if((strstr(pDeviceDetailData->DevicePath,"USB")==NULL)&&(strstr(pDeviceDetailData->DevicePath,"usb")==NULL)) continue; //可以打开设备了 char DevicePath[256]; //存储设备的路径名 strcpy(DevicePath,pDeviceDetailData->DevicePath ); strcat(DevicePath,"\PIPE1"); HANDLE hUSBFile=NULL; hUSBFile=CreateFile(DevicePath,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL); if(hUSBFile) printf("成功打开设备!n"); else{ printf("打开设备失败!n"); break; } //打开设备成功了,就可以读写了 HIDD_ATTRIBUTES hidDeviceAttributes; if (HidD_GetAttributes (hUSBFile, &hidDeviceAttributes)) { //下面就是你所要的,当然你想获得其他信息可以用别的函数,方法差不多 //hidDeviceAttributes.VendorID //hidDeviceAttributes.ProductID } } //最后别忘了关闭设备 if(CloseHandle(hUSBFile)) printf("成功关闭设备!n"); else printf("关闭设备失败!n"); } //退出喽 //释放资源 SetupDiDestroyDeviceInfoList(hDeviceInfo); //回车退出 printf("Press ENTER to Exit!"); getchar(); return 0; } |
|
|
地下室#
发布于:2005-02-02 14:37
可是编译不过啊
Compiling... qqqq.cpp C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(61) : error C2065: 'HIDD_ATTRIBUTES' : undeclared identifier C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(61) : error C2146: syntax error : missing ';' before identifier 'hidDeviceAttributes' C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(61) : error C2065: 'hidDeviceAttributes' : undeclared identifier C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(62) : error C2065: 'HidD_GetAttributes' : undeclared identifier C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(71) : error C2065: 'hUSBFile' : undeclared identifier C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(76) : error C2065: 'hDeviceInfo' : undeclared identifier C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(76) : error C2501: 'SetupDiDestroyDeviceInfoList' : missing storage-class or type specifiers C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(76) : error C2373: 'SetupDiDestroyDeviceInfoList' : redefinition; different type modifiers c:\program files\microsoft visual studio\vc98\include\setupapi.h(3629) : see declaration of 'SetupDiDestroyDeviceInfoList' C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(78) : error C2501: 'printf' : missing storage-class or type specifiers C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(78) : error C2373: 'printf' : redefinition; different type modifiers c:\program files\microsoft visual studio\vc98\include\stdio.h(329) : see declaration of 'printf' C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(78) : error C2440: 'initializing' : cannot convert from 'char [21]' to 'int' This conversion requires a reinterpret_cast, a C-style cast or function-style cast C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(78) : error C2059: syntax error : '--' C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(78) : error C2059: syntax error : ')' C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(78) : error C2501: '_filbuf' : missing storage-class or type specifiers C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(78) : error C2373: '_filbuf' : redefinition; different type modifiers c:\program files\microsoft visual studio\vc98\include\stdio.h(275) : see declaration of '_filbuf' C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(78) : error C2440: 'initializing' : cannot convert from 'struct _iobuf *' to 'int' This conversion requires a reinterpret_cast, a C-style cast or function-style cast C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(79) : error C2143: syntax error : missing ';' before 'return' C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(80) : error C2143: syntax error : missing ';' before '}' C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(80) : error C2143: syntax error : missing ';' before '}' C:\Program Files\Microsoft Visual Studio\MyProjects\qqqq\qqqq.cpp(80) : error C2143: syntax error : missing ';' before '}' Error executing cl.exe. qqqq.exe - 20 error(s), 0 warning(s) |
|
5楼#
发布于:2005-02-03 14:22
建议你看USB complete, 以及其网站上的例子。很有用的
|
|