LRESULT CALLBACK WndProcIn(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){ PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam; PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb; char driveName; CString diskpath = ""; if(uMsg == WM_DEVICECHANGE){ if(wParam == DBT_DEVICEARRIVAL){ driveName = FirstDriveFromMask(lpdbv->dbcv_unitmask); diskpath.Format("%c:\\",driveName); Son->USBIn(diskpath); } } return DefWindowProc(hWnd, uMsg, wParam, lParam); }
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch(msg) { case WM_DEVICECHANGE: { PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR) lParam; switch(wParam) { case DBT_DEVICEARRIVAL: if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME) { PDEV_BROADCAST_VOLUME lpdv = (PDEV_BROADCAST_VOLUME) lpdb; TCHAR z = FirstDriveFromMask(lpdv->dbcv_unitmask); if (DriveType(z) == DT_REMOVABLE) PendriveArrive(z); } } } } return DefWindowProc(hWnd,msg,wParam,lParam); }
/************************************* * void OnDeviceChange (HWND , WPARAM , LPARAM ) * 功能 处理 WM_DEVICECHANGE 消息 * 参数为窗口消息 **************************************/ void OnDeviceChange (HWND hwnd, WPARAM wParam, LPARAM lParam) { // 获取 PDEV_BROADCAST_HDR 参数 PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam; char szMsg[256]; HDC hdc = GetDC(hwnd); DWORD dwStrLen; SIZE sz; TEXTMETRIC tm; switch(wParam) { case DBT_DEVICEARRIVAL: // 插入 CD 或者 DVD 到光驱中 if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME) { // 获取参数 PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb; // 判断标志 if (lpdbv -> dbcv_flags & DBTF_MEDIA) { wsprintf (szMsg, "Drive %c: Media has arrived.", // 根据mask获取盘符, // dbcv_unitmask的bit依次表示A:,B:...,如果为1,表示是该盘符, FirstDriveFromMask(lpdbv ->dbcv_unitmask)); } else // 标志不配置,打印事件ID wsprintf (szMsg, "Message: %u.", wParam); } else // 设置类型不配置,打印事件ID wsprintf (szMsg, "Message: %u.", wParam); break; case DBT_DEVICEREMOVECOMPLETE: // 光驱弹出 if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME) { // 获取参数 PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb; // 检查标志 if (lpdbv -> dbcv_flags & DBTF_MEDIA) { wsprintf (szMsg, "Drive %c: Media was removed.", FirstDriveFromMask(lpdbv ->dbcv_unitmask)); } else wsprintf (szMsg, "Message: %u.", wParam); } else wsprintf (szMsg, "Message: %u.", wParam); break; default: // 其他设备改变情况,打印设备ID wsprintf (szMsg, "Message: %u.", wParam); } // 在界面上输出设备变更消息 dwStrLen = lstrlen(szMsg); // 计算输出位置 GetTextExtentPoint32(hdc, szMsg, dwStrLen, &sz); YStart += sz.cy; GetTextMetrics(hdc, &tm); YStart -= tm.tmOverhang; // TODO 窗口滚动 TextOut(hdc, 10, YStart, szMsg, dwStrLen); DeleteDC( hdc ); // 释放DC }