//可以查看按游戏手柄按钮时的情况.
//usb接口的游戏手柄
//编译环境:windows 2000 server+vc++ 6.0+win2k ddk
#include <stdio.h>
#include <windows.h>
#include <setupapi.h>
#include <tchar.h>
extern "c"
{
#include <hidsdi.h>
}
void main()
{
guid hidguid;
// 查找本系统中hid类的guid标识
hidd_gethidguid(&hidguid);
_tprintf("系统中hid类的guid标识为:%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\n",
hidguid.data1,hidguid.data2 ,hidguid.data3 ,
hidguid.data4[0],hidguid.data4[1],hidguid.data4[2],
hidguid.data4[3],hidguid.data4[4],hidguid.data4[5],
hidguid.data4[6],hidguid.data4[7]);
// 准备查找符合hid规范的usb设备
hdevinfo hdevinfo = setupdigetclassdevs(&hidguid,
null,
null,
digcf_present | digcf_deviceinterface);
if (hdevinfo == invalid_handle_value)
{
_tprintf("符合hid规范的usb设备发生错误\n");
return;
}
_tprintf("正在查找可用的usb设备...\n");
dword memberindex = 0;
sp_device_interface_data deviceinterfacedata;
bool bsuccess = false;
deviceinterfacedata.cbsize = sizeof(sp_device_interface_data);
do
{
bsuccess = setupdienumdeviceinterfaces(hdevinfo,
null,
&hidguid,
memberindex,
&deviceinterfacedata);
if ((!bsuccess) && (getlasterror() == error_no_more_items))
{
if(memberindex == 0)
_tprintf("抱歉,未找到可用的usb设备!\n");
else
_tprintf("没有更多的可用的usb设备!\n");
setupdidestroydeviceinfolist(hdevinfo);
return;
}
_tprintf("找到了一个usb设备:\n");
//若找到了一个usb设备,则获取该设备的细节信息
psp_device_interface_detail_data pdeviceinterfacedetaildata;
dword length = 0;
setupdigetdeviceinterfacedetail(hdevinfo,
&deviceinterfacedata,
null,
0,
&length,
null);
pdeviceinterfacedetaildata = (psp_device_interface_detail_data)malloc(length);
pdeviceinterfacedetaildata->cbsize = sizeof(sp_device_interface_detail_data); //must be!!!
if (!setupdigetdeviceinterfacedetail(hdevinfo,
&deviceinterfacedata,
pdeviceinterfacedetaildata,
length,
null,
null))
_tprintf("查找路径设备时出错!\n");
else
_tprintf("设备路径:%s\n",pdeviceinterfacedetaildata->devicepath );
//打开设备句柄
handle hdevicehandle = createfile(pdeviceinterfacedetaildata->devicepath ,
generic_read | generic_write,
file_share_read | file_share_write,
null,
open_existing,
0,
null);
if (hdevicehandle == invalid_handle_value)
_tprintf("打开设备路径出错!\n");
else
{
hidd_attributes attributes;
hidd_getattributes(hdevicehandle,&attributes);
//将有关该设备的标识显示出来
_tprintf("供应商id\t:0x%04x\n",attributes.vendorid);
_tprintf("产品id\t:0x%04x\n",attributes.productid);