MFC 檢測USB介面裝置連線變化

2021-06-17 22:11:11 字數 1361 閱讀 1603

新增 wm_devicechange 訊息

afx_msg bool ondevicechange(uint neventtype, dword_ptr dwdata);

begin_message_map(cwndclass, cbaseclass)

on_wm_devicechange()

end_message_map()

// 獲取碟符

long cwndclass::judgedeviceletter( long nflags )

return i + 'a';

}bool cwndclass::ondevicechange(uint neventtype, dword_ptr dwdata)

;dworddwdisk = 0;

uintudrvtype = 0;

int ndisk = judgedeviceletter(pdevvolume->dbcv_unitmask);

_sntprintf_s(szrootpathname, max_path, _t("%c:\\"), ndisk);

udrvtype = getdrivetype(szrootpathname);

if(drive_removable != udrvtype)

return true;

if(drive_unknown == udrvtype || drive_no_root_dir == udrvtype || drive_cdrom == udrvtype)

return true;

return true;

}//windows裝置管理器在改變裝置狀態後會廣播乙個自註冊的訊息。

//其格式為"devmgrrefreshon"+計算機名;

//我們在收到此訊息後重新整理裝置列表

//注意:最好不用wm_devicechange,wm_devicechange在改變裝置之前已傳送,但改變裝置可能需要一些時間,

//如果一接收到wm_devicechange就更新的話,可能裝置改變這一動作還沒有做完。

//因此,響應windows裝置管理器自註冊更好些。

//由於有些自製安裝程式,比如sofeice帶的ezdriverinstaller在改變狀態後只廣播wm_devicechange

//最好兩種情況綜合考慮。

static cstring getdevicechangedmsg()

const uint wm_devicechanged = ::registerwindowmessage(getdevicechangedmsg());

新增自定義訊息:

on_registered_message(wm_devicechanged,ondevicechanged)

MFC檢測USB熱插拔

在網上找了很久,發現這個方法還是可以實現的,但是必須要知道usb裝置的guid,我準備寫下來留作以便以後查詢 bool cxxdlg ondevicechange uint neventtype,dword dwdata break case dbt devicearrival break defa...

Linux下USB裝置檢測

usb裝置檢測也是通過 proc目錄下的usb檔案系統進行的。為了使乙個usb裝置能夠正常工作,必須要現在系統中插入usb橋接器模組。在檢測開始時,一般要先檢測是否存在 proc bus usb目錄,若不存在則嘗試插入usb橋接模組。現在一般的usb橋接器模組有兩種型別,uhci和ohci。在決定插...

Linux下USB裝置檢測

usb裝置檢測也是通過 proc目錄下的usb檔案系統進行的。為了使乙個usb裝置能夠 正常工作,必須要現在系統中插入usb橋接器模組。在檢測開始時,一般要先檢測是否存在 proc bus usb目錄,若不存在則嘗試插入usb橋接模組。現在一般的usb橋接器模組有兩種型別,uhci和ohci。在決定...