本文介紹如何在 VC++ 環境下枚舉 HID 設備、打開 USB 遊戲手柄、讀取輸入報告並解析按鍵數據。編譯環境為 Windows 2000 Server + VC++ 6.0 + Win2K DDK。
調用 HidD_GetHidGuid 取得系統中 HID 類的 GUID 標識,並格式化輸出。
使用 SetupDiGetClassDevs 獲取設備信息集,隨後以 SetupDiEnumDeviceInterfaces 遍歷每個設備介面。
對於每個找到的介面,呼叫 SetupDiGetDeviceInterfaceDetail 取得設備路徑,然後以 CreateFile 打開設備句柄(需 GENERIC_READ | GENERIC_WRITE)。
通過 HidD_GetAttributes 取得廠商 ID、產品 ID、版本號;以 HidD_GetManufacturerString 和 HidD_GetProductString 獲取廠商與產品名稱。
調用 HidD_GetPreparsedData 取得預解析數據,再用 HidP_GetCaps 獲取 HIDP_CAPS 結構,從中得知輸入報告的字節長度。
分配緩衝區,反覆呼叫 ReadFile 讀取輸入報告。當讀取字節數匹配預期長度時,將原始字節以十六進制輸出。示例中以檢測特定按鍵(0x20)作為退出條件。
關閉設備句柄、釋放緩衝區、銷毀設備信息列表。
// 參考原文完整代碼,包含上述所有步驟的實現細節
掌握 HID API 的調用順序,即可實現對任意 USB 遊戲手柄的底層輸入捕獲,為遊戲開發或設備測試提供基礎支撐。