afx_msg LRESULT OnDeviceChange(WPARAM wParam, LPARAM lParam);
```cpp执行文件
LRESULT CResetBootDlg::OnDeviceChange(WPARAM nEventType, LPARAM dwData)
{
DEV_BROADCAST_DEVICEINTERFACE* dbd = (DEV_BROADCAST_DEVICEINTERFACE*)dwData;
CString szInfo;
switch (nEventType)
{
case DBT_DEVICEARRIVAL:
{
CString devInfo = dbd->dbcc_name;
devInfo.MakeUpper();
char *rr = strstr(devInfo, "VID_0416"); // !! 可过滤特定设备ID,下同
if (rr == NULL)
{
return FALSE;
}
szInfo.Format(_T("USB: 设备已插入."));
this->GetDlgItem(IDS_UsbEvent)->SetWindowText(szInfo);
//执行软件功能
OnResetboot();
}
break;
case DBT_DEVICEREMOVECOMPLETE:
{
// 注:dbd->dbcc_name只有1个字节,不能直接用其来做源地址拷贝,直接使用偏移,上同
CString devInfo = dbd->dbcc_name;
devInfo.MakeUpper();
char *rr = strstr(devInfo, "VID_0416"); // !! 可过滤特定设备ID,下同
if (rr == NULL)
{
return FALSE;
}
szInfo.Format(_T("USB: 设备已移除."));
this->GetDlgItem(IDS_UsbEvent)->SetWindowText(szInfo);
setTips("",25,green);
}
break;
default:
{
//szInfo.Format(L"[%d]got event: %d\n", cnt, nEventType);
//this->GetDlgItem(IDC_STC_DEVINFO)->SetWindowText(szInfo);
}
break;
}
return TRUE;
}