程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> USB有關的編程

USB有關的編程

編輯:關於VC++

現在USB設備卻很多,因此對USB設備的查找與讀寫就必不可少了。但是能找到關於USB讀寫的資料很少。這裡使用VC++示范了一些獲得USB的信息的方法。

一、枚舉USB設備

通過枚舉USB控制器->枚舉此控制器上的USB HUB->枚舉HUB的各個端口->獲得設備信息。

枚舉控制器:

wsprintf(HCName, "\\\\.\\HCD%d", HCNum);
hHCDev = CreateFile(HCName,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);

計算機上的USB主控制器以HCD1,HCD2等命名。通過控制器名稱,使用CCreateFile 打開它。使用DeviceIoControl即可得到其驅動程序名,以及與它連接的HUB的名稱。用CCreateFile打開HUB,獲得連接信息。再枚舉HUB的各個端口即可獲得連接的設備信息。

二、枚舉HID設備

HID設備是微軟定義的標准人機接口規范。比如USB鼠標,USB游戲手柄等。不用查找具體設備的GUID,使用API HidD_GetHidGuid(&guidHID)即可得到GUID。有了GUID通過API SetupDiEnumDeviceInterfaces可獲得是否有設備連接。如果此類設備連接通過SetupDiGetDeviceInterfaceDetail獲得它的設備路徑信息。使用CCreateFile 打開它,通過HidD_GetAttributes獲得其基本屬性信息。使用DeviceIoControl可以獲得更詳細的屬性。在本代碼中如果計算機上插有USB游戲手柄,可獲得其信息。但不知道為什麼xp下卻不能獲得USB鼠標的信息。

三 枚舉U盤

先用GetDriveType API獲得設備的類型,若類型為REMOVABLE(當然有些大容量U盤可能報告為FIXED,那就需要其他方法來確定了),即可能是U盤。用CCreateFile 打開之後,再用IOCTL_STORAGE_QUERY_PROPERTY為參數的DeviceIoControl來獲得其屬性。

四、結束語

示例工程在winxp+xpDDK+VC6下編譯通過。USB設備種類比較多,也比較特殊,不同廠商的硬件不同,控制軟件也不盡相同(我想主要是ICTL碼不同,也不容易查到)。使得訪問USB口的設備不象串口並口那麼方便。這個例程只是展示了訪問的基本方法。其中還有些問題還沒有解決,發出來希望大家解決之後能通知我或者發表出來。

參考了USBPort,USBview等代碼,一並致謝。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved