HID學習 獲取遊戲手柄的按鍵輸

2021-07-25 02:38:24 字數 2169 閱讀 7581

//可以檢視按遊戲手柄按鈕時的情況.

//usb介面的遊戲手柄

//編譯環境:windows xp+vc++ 6.0+winxp ddk

#pragma comment(lib, "hid.lib")

#pragma comment(lib, "setupapi.lib")

#include #include #include #include extern "c"

void main()

_tprintf("正在查詢可用的usb裝置...\n");

dword memberindex = 0;

sp_device_inte***ce_data deviceinte***cedata;

bool bsuccess = false;

deviceinte***cedata.cbsize = sizeof(sp_device_inte***ce_data);

do_tprintf("找到了乙個usb裝置:\n");

//若找到了乙個usb裝置,則獲取該裝置的細節資訊

psp_device_inte***ce_detail_data pdeviceinte***cedetaildata;

dword length = 0;

setupdigetdeviceinte***cedetail(hdevinfo,

&deviceinte***cedata,

null,

0,&length,

null);

pdeviceinte***cedetaildata = (psp_device_inte***ce_detail_data)malloc(length);

pdeviceinte***cedetaildata->cbsize = sizeof(sp_device_inte***ce_detail_data); //must be!!!

if (!setupdigetdeviceinte***cedetail(hdevinfo,

&deviceinte***cedata,

pdeviceinte***cedetaildata,

length,

null,

null))

_tprintf("查詢路徑裝置時出錯!\n");

else

_tprintf("裝置路徑:%s\n",pdeviceinte***cedetaildata->devicepath );

//開啟裝置控制代碼

handle hdevicehandle = createfile(pdeviceinte***cedetaildata->devicepath ,

generic_read | generic_write,

file_share_read | file_share_write,

null,

open_existing,

0,null);

if (hdevicehandle == invalid_handle_value)

_tprintf("開啟裝置路徑出錯!\n");

else

ntstatus status = hidp_getcaps(phi***reparseddata,&hidpcaps);

if (status == hidp_status_success)

dword nreadbytes = 0;

byte *pinputreport = new byte[hidpcaps.inputreportbytelength];

memset(pinputreport,0,hidpcaps.inputreportbytelength);

doif (pinputreport[nreadbytes-2] == 0x20) //break the loop when pressing a specific key

sleep(10);

}while(hidpcaps.inputreportbytelength == nreadbytes);

//釋放控制代碼資源

closehandle(hdevicehandle);

}memberindex++;

}while(bsuccess);

setupdidestroydeviceinfolist(hdevinfo);

}

詳細可參考

相同HID裝置的控制代碼獲取

思路其實很簡單 通常我們使用pid和vid來獲得不同裝置的控制代碼,相同pid和vid的裝置,就需要其他的特徵來獲取控制代碼。相同hid的裝置,裝置路徑是不同的,可以用裝置路徑作為區分,來獲得控制代碼即可。else if devdetail null free devdetail if hidhan...

在遊戲開發中的使用icade手柄

當ab兩個按鍵同時按下時,會表示為手柄上的g鍵被按下,同時ab兩個按鍵被鬆開。當cd兩個按鍵同時按下時,會表示為手柄上的h鍵被按下,同時cd兩個按鍵被鬆開。在網上找到了乙個相關的 手柄使用鍵盤的按鍵來代替手柄按鍵,實際上icade手柄是作為乙個鍵盤連線到遊戲中的。下邊是icade規定的按鍵值 up ...

Qt之與遊戲手柄的互動(一)

通過手柄與qt的通訊,傳送指令至遠端裝置,控制遠端裝置的運動。市面上的遊戲手柄也有多種種類,主流的是藍芽手柄 2.4g手柄和usb手柄。2.4g手柄有的會識別出來是xbox裝置,有的識別出來是usb裝置。本文中的方法只支援xbox手柄,使用其他手柄不會被qt的手柄模組識別到,這裡用的是 銷量第一的北...