新增 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。在決定...