1
Reply

Why I cann't get the message device type:DBT_DEVTYP_DEVICEINTERFACE?

gongdehui

gongdehui

Oct 25 2004 6:54 AM
6.2k
I can get the message device tpye DBT_DEVTYP_VOLUME,but my WndProc cann't get the DBT_DEVTYP_DEVICEINTERFACE message device type.My code is: const int WM_DEVICECHANGE = 0x0219; public enum DEVICETYPE:int { DBT_DEVTYP_OEM =0x00000000,// oem-defined device type DBT_DEVTYP_DEVNODE = 0x00000001, // devnode number DBT_DEVTYP_VOLUME = 0x00000002, // logical volume DBT_DEVTYP_PORT = 0x00000003, // serial, parallel DBT_DEVTYP_NET =0x00000004, // network resource DBT_DEVTYP_DEVICEINTERFACE =0x00000005 //device interface class } public struct _DEV_BROADCAST_HDR { public int dbch_size; public DEVICETYPE dbch_devicetype; private int dbch_reserved; } public struct _DEV_BROADCAST_VOLUME { public int dbcv_size; public DEVICETYPE dbcv_devicetype;//Set to DBT_DEVTYP_VOLUME private int dbcv_reserved; public uint dbcv_unitmask; public int dbcv_flags; } public struct _DEV_BROADCAST_DEVICEINTERFACE { public int dbcc_size; public DEVICETYPE dbcc_devicetype; //Set to DBT_DEVTYP_DEVICEINTERFACE public int dbcc_reserved; public System.Guid dbcc_classguid; //char dbcc_name[1]; } protected override void WndProc(ref Message devicemsg) { _DEV_BROADCAST_DEVICEINTERFACE DevBroadcastInterface; DEVICEEVENT Eventtype; _DEV_BROADCAST_HDR Whicheventtype; _DEV_BROADCAST_VOLUME DevBroadcastVolume; base.WndProc(ref devicemsg); if(devicemsg.Msg == WM_DEVICECHANGE) { Eventtype = (DEVICEEVENT)devicemsg.WParam.ToInt32(); switch(Eventtype) { case DEVICEEVENT.DBT_DEVICEARRIVAL: { Whicheventtype = (_DEV_BROADCAST_HDR)Marshal.PtrToStructure(devicemsg.LParam,typeof(_DEV_BROADCAST_HDR)); switch(Whicheventtype.dbch_devicetype) { case DEVICETYPE.DBT_DEVTYP_DEVICEINTERFACE: {//this case can not be retrieved,why? DevBroadcastInterface = (_DEV_BROADCAST_DEVICEINTERFACE)Marshal.PtrToStructure(devicemsg.LParam,typeof(_DEV_BROADCAST_DEVICEINTERFACE)); //do something here. break; } case DEVICETYPE.DBT_DEVTYP_VOLUME: {// but this case can be retrieved. DevBroadcastVolume = (_DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(devicemsg.LParam,typeof(_DEV_BROADCAST_VOLUME)); //do something here. break; }//end case DBT_DEVTYP_VOLUME }//end switch(pDevBroadcastHdr.dbch_devicetype) }//end case DBT_DEVICEARRIVAL break; }//end switch(Eventtype) }//end if }//end WndProc() Why does the WndProc can not retrive the DBT_DEVTYP_DEVICEINTERFACE message device type? Thanks!

Answers (1)
Next Recommended Forum