获取游戏手柄的按键输入[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 mrh123 的 blog

//可以查看按游戏手柄按钮时的情况.

//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);

本文关键:游戏,手柄,HID
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top