16,472
社区成员
发帖
与我相关
我的任务
分享
LRESULT CUDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: 在此添加专用代码和/或调用基类
switch (message)
{
//WM_DEVICECHANGE,系统硬件改变发出的系统消息
case WM_DEVICECHANGE:
{
PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
switch (wParam)
{
case WM_DEVICECHANGE:
break;
case DBT_DEVICEARRIVAL://DBT_DEVICEARRIVAL,设备检测结束,并且可以使用
{
if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)//逻辑卷
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
switch (lpdbv->dbcv_flags)
{
case 0: //U盘
{
CString decDriver;
decDriver = FirstDriveFromMask(lpdbv->dbcv_unitmask);
TRACE1("检测到U盘:[%s]插入!\n", decDriver.GetBuffer(0));
}
break;
case DBTF_MEDIA: //光盘
TRACE1("检测到光盘:[%c]插入!\n", FirstDriveFromMask(lpdbv->dbcv_unitmask));
break;
}
}
}
break;
case DBT_DEVICEREMOVECOMPLETE://DBT_DEVICEREMOVECOMPLETE,设备卸载或者拔出
{
if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)//逻辑卷
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
switch (lpdbv->dbcv_flags)
{
case 0: //U盘
{
CString decDriver;
decDriver = FirstDriveFromMask(lpdbv->dbcv_unitmask);
TRACE1("检测到U盘:[%s]拔出!\n", decDriver.GetBuffer(0));
}
break;
case DBTF_MEDIA: //光盘
break;
}
}
}
break;
}
}
break;
}
return CDialogEx::WindowProc(message, wParam, lParam);
}
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx)
ON_WM_DEVICECHANGE() // USB设备变动消息
END_MESSAGE_MAP()
afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD dwData); // USB设备变动
[code=c]
[ switch (nEventType)
{
case DBT_DEVICEREMOVECOMPLETE : // 拔掉设备
// 路径判定
if(GetVidAndPid(dbd->dbcc_name))
{
m_isUsbLink=m_bTimer=false;
UsbLinkStatus(FALSE); // 报告USB连接状态
// 报告设备断开
ShowDeviceStatus(false);
// 设备被拔掉
CloseDev(); // 关闭设备
}
break;
case DBT_DEVICEARRIVAL: // 插上设备
// 路径判定
if(GetVidAndPid(dbd->dbcc_name))
{
m_isUsbLink=true;
UsbLinkStatus(TRUE); // 报告USB连接状态
// 设备插上,创建USB连接
BuildConnectUSB(dbd->dbcc_name);
}
break;
default:
break;
}
/code]