| C/C++ code
 
 LRESULT CALLBACK
 WndProc( HWND hwnd,       // handle to window
 UINT uMsg,       // message identifier
 WPARAM wParam,   // First message parameter
 LPARAM lParam)   // second message parameter
 {
 if ( g_device == NULL )
 return 0;
 DEV_BROADCAST_HDR * dhr;
 switch ( uMsg )
 {
 case WM_TIMER:
 g_device->CheckChange();
 break;
 case WM_DEVICECHANGE:  //
 char str[256];
 dhr = (DEV_BROADCAST_HDR*)lParam;
 switch( wParam )
 {
 case DBT_DEVICEARRIVAL:
 PDEV_BROADCAST_DEVICEINTERFACE lpdbd;
 PDEV_BROADCAST_VOLUME lpdbv;
 switch( dhr->dbch_devicetype )
 {
 case DBT_DEVTYP_DEVICEINTERFACE:
 lpdbd = (PDEV_BROADCAST_DEVICEINTERFACE)lParam;
 sprintf( str, "GUID:%x-%x-%x-%x", lpdbd->dbcc_classguid.Data1, lpdbd->dbcc_classguid.Data2, lpdbd->dbcc_classguid.Data3, lpdbd->dbcc_classguid.Data4 );
 break;
 case DBT_DEVTYP_VOLUME:
 lpdbv = (PDEV_BROADCAST_VOLUME)lParam;
 char cDisk = FirstDriverFromMask(lpdbv->dbcv_unitmask);
 sprintf( str, "Drive: %c 盘插入", cDisk );
 if ( g_device->m_usb_IsDisab )
 {
 GetUSBDiskID(cDisk);
 }
 g_device->CheckSet();
 break;
 }// end switch
 break;
 case DBT_DEVICEREMOVECOMPLETE:
 if ( dhr->dbch_devicetype == DBT_DEVTYP_VOLUME )
 {
 PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lParam;
 //sprintf( str, "Drive: %c 盘拔出", FirstDriverFromMask(lpdbv->dbcv_unitmask) );
 //g_device->CheckSet();
 }
 break;
 } // end switch( wParam )
 break;
 case WM_DESTROY:
 PostQuitMessage(0);
 break;
 } // end switch
 return DefWindowProc( hwnd, uMsg, wParam, lParam );
 }
 |