檢測USB和SD卡儲存裝置的接入和移除

2021-05-25 15:01:50 字數 1199 閱讀 3561

方法一:依賴視窗

方法二:從登錄檔入手

方法一:

由於usb儲存裝置和sd卡都是儲存裝置,

當裝置接入的時候列舉登錄檔路徑"hkey_local_machine//drivers//active"下的子鍵,根據 p->dbcp_name;查詢自檢中與此值匹配的項,查詢該項的鍵項"key"的值是否包含"drivers//usb//clientdrivers//mass_storage_class"字段,如果包含則加入了usb儲存裝置,若包含帶有sd的字段,則加入了sd卡裝置

但是當裝置移除的時候從登錄檔裡已經找不到這些資訊,唯一可行的就是要儲存登錄檔項的內容,顯得比較麻煩,而且非得依賴視窗才能實現,在寫dll的時候出現了一些問題,所以尋找下一種方法。

方法二:

思路:1.列舉登錄檔路徑"hkey_local_machine//drivers//active"下的子鍵, 

若該鍵的鍵項"key"的值包含"drivers//usb//clientdrivers//mass_storage_class",表示該裝置為usb裝置;

若該鍵的鍵項"key"的值包含"drivers//sdcard//clientdrivers//class",表示該裝置為sd卡裝置;

規定,若未sd卡裝置value = 1;若未usb儲存裝置value = 0.

2.列舉的時候採用從head插入,讀取的時候從煉表頭開始讀,讀到某一項其鍵項"key"的值既不代表usb儲存裝置也不代表sd卡裝置的時候停止。

儲存求得的和sum;

old_itemnamelist = enumactivedir();

old_sum = count(old_itemnamelist);

3.監控登錄檔項"hkey_local_machine,text//drivers//active",此項發生變化說明有裝置接入或者移除,當變化的時候重新列舉並比較變化前後的結構體 

cur_itemnamelist = enumactivedir();  //preg_item_name  enumactivedir()

compare(old_itemnamelist, cur_itemnamelist);//比較主要是檢視兩個結構體子項的數目,如果old比cur大,說明有裝置移除,反之有裝置新增。

根據old和cur的差值來判斷是哪種型別的裝置接入或者移除。

enumactivedir函式實現如下:

compare函式實現如下:

Wince 檢測 SD卡 USB 拔插

在wince系統中,如何檢測usb sd卡的拔插呢?可能有的會寫乙個執行緒專門去偵察usb sd 的拔插情況,我覺得這樣又費資源又費時間,很不划算,有沒有更好的辦法呢?當然有,今天我就介紹一種新的方法 wm devicechange,如下 cpp view plain copy lresult c ...

Android儲存裝置 U盤,SD卡 狀態監測

我們是以dv6300 t的平台來做測試的,發現有2種方式來檢測android中external media 包括sd卡,usb 的狀態。一種是使用storagelistener監聽,還有一種是使用廣播的方式。相關的類主要有 recorddevicemanager devicestatelistene...

檔案儲存許可權和訪問SD卡

一 檔案儲存許可權 在儲存檔案是會f檔案儲存權ileoutputstream outstream context.openfileoutput filename,context.mode private 需要設定對於檔案的許可權 context.mode private 代表檔案是私有資料,只能被應...