這是一篇流水賬,只是講下識別Android手機的思路。也許不是最好的辦法,但是是可行的。
枚舉USB控制器,得到每個USB裝置的資訊,主要是擷取Vendor、Product和SerialNumber
其實也就是實現USBView的功能,可以參考USBView的源碼
http://download.csdn.net/detail/nightrainljh/3717068
這個資源的程式可能跑不起來,不過沒關係,只要看看源碼就好了
中的軟體是用的RW-Everything,可以查看本機硬體資訊,很方便
遍曆手機的描述符,找出ADB介面裝置,那麼如何確定介面是ADB呢?我這裡的辦法是檢查分類代碼,如果是0xFF 0x42 0x01,而且裝置有序號的話
則認為是Android裝置(我目前採用的判斷辦法,暫時沒識別錯誤的問題)
這個我之前就轉過一篇分類代碼含義文章,可以參考一下
http://blog.csdn.net/aqtata/article/details/8285253
整理一下思路,擷取USB裝置,得到VID和PID,有些VID沒有做過Android手機,可以過濾一道
然後找出ADB的介面描述(分類代碼為0xFF 0x42 0x01 且有序號),基本判定就是Android裝置了!
當然,要100%精確確定是不是Android裝置,最好的辦法是通過VID和PID去檢測。但由於PID是各個製造商自行定義的
所以我們是不可能有這個PID資料的,只能通過上面的笨辦法去檢測!
接著,就是檢查ADB驅動是否安裝。
通過ADB驅動檔案中得知,ADB裝置介面GUID是{F72FE0D4-CBCB-407d-8814-9ED673D0DD6B}
我們只需要通過SetupDiXXX系列API來枚舉裝置,檢查是否有ADB裝置即可
如果在USB裝置中篩選出了手機裝置,但是卻沒有找到ADB裝置,那麼基本可以確定本機沒有安裝ADB驅動
然後就是從"未知裝置"中找到ADB裝置即可。怎麼匹配呢?找它的"父系"!
可以看到,"父系"和VID、PID、SerialNumber和之前找到的USB裝置資訊相匹配!那麼就確定了它是ADB裝置!剩下的就是安裝合適的驅動程式了……