现在程序在插拔U盘时可以响应到WM_DEVICECHANGE的消息了,现还有2问题:1.我怎样才能得到U盘符呢?比如是F盘,我怎样才能得到F?2.当接入的U盘数超过盘符名Z怎么来表示?偶是新手,菜鸟一个,盼各位指教,不甚感谢!
LONG CMainFrame::OnDeviveChange(WPARAM wParam, LPARAM lParam)
{
CString str;
DEV_BROADCAST_HDR * dhr = (DEV_BROADCAST_HDR *)lParam;
switch(wParam)
{
case DBT_DEVICEARRIVAL:
{
//得到插入的USB盘符,求助
}
break;
case DBT_DEVICEREMOVECOMPLETE:
{
//得到拔除的USB盘符,求助
}
break;
}}
LONG CMainFrame::OnDeviveChange(WPARAM wParam, LPARAM lParam)
{
CString str;
DEV_BROADCAST_HDR * dhr = (DEV_BROADCAST_HDR *)lParam;
switch(wParam)
{
case DBT_DEVICEARRIVAL:
{
//得到插入的USB盘符,求助
}
break;
case DBT_DEVICEREMOVECOMPLETE:
{
//得到拔除的USB盘符,求助
}
break;
}}
if(dhr->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)dhr;
if(lpdbv->dbcv_flags & DBTF_MEDIA)
{
str.Format("Drive %c 插入", FirstDriveFromMask(lpdbv ->dbcv_unitmask));
//AfxMessageBox(str);
}
else
{
char ch = FirstDriveFromMask(lpdbv ->dbcv_unitmask);
str.Format("%c:\\",ch);
CopyUFile((LPTSTR)(LPCTSTR)str);
}
}
char CTestUSBDlg::FirstDriveFromMask (ULONG unitmask)
{
char i; for (i = 0; i < 26; ++i)
{
if (unitmask & 0x1)
break;
unitmask = unitmask >> 1;
} return (i + 'A');
}