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 );
} |