czcty
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2006-11-08
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:1747回复:5

我这边有个设备属于HID类的,能否写程序获取它的信息,怎么写?

楼主#
更多 发布于:2005-01-28 12:20
我这边有个设备属于HID类的,能否写程序获取它的信息,怎么写?

最新喜欢:

cyliucyliu
quicker
驱动牛犊
驱动牛犊
  • 注册日期2004-07-18
  • 最后登录2005-08-08
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-28 16:49
你想获得它的什么信息?
可用hid.dll的函数,hidd_或hidp_开头的函数在应用层就可获取
生命不能承受之轻!
czcty
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2006-11-08
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-28 17:15
小弟不才,请问代码如何写?
quicker
驱动牛犊
驱动牛犊
  • 注册日期2004-07-18
  • 最后登录2005-08-08
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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;
}
生命不能承受之轻!
czcty
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2006-11-08
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分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)
chony
驱动牛犊
驱动牛犊
  • 注册日期2005-01-25
  • 最后登录2015-05-22
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-02-03 14:22
建议你看USB complete, 以及其网站上的例子。很有用的
游客

返回顶部