//可以檢視按遊戲手柄按鈕時的情況.
//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的手柄模組識別到,這裡用的是 銷量第一的北...