检测USB插入和移除事件

    技术2022-05-11  77

    问者:sumoyu() 信誉:100 级别:user1 日期:2006-10-13 10:12:51

    监测到USB的插入或移出,得到盘符; 事件WM_DEVICECHANGE可以监测到插入和移除,如何判断是插入还是移除,以及如何取盘符

    回复:



    答者:FFSB(搞点小资) 信誉:100 级别:user2 日期:2006-10-13 11:07:49 id:37208771

    Form1::OnCreate //================Dev Notfi============================ DEV_BROADCAST_DEVICEINTERFACE NotificationFilter; ZeroMemory( &NotificationFilter, sizeof(NotificationFilter) ); NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; NotificationFilter.dbcc_classguid = g_UsbioID; DevNotify = RegisterDeviceNotification( Handle, &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE ); ========================== //--------------------------------------------------------------------------- void __fastcall TDCForm::WMDeviceChange(TMessage & Msg) { if(Msg.WParam == DBT_DEVICEARRIVAL) { PDEV_BROADCAST_HDR hDev = (PDEV_BROADCAST_HDR)Msg.LParam; if(hDev->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE) { // Do nothing! } } else if(Msg.WParam == DBT_DEVICEREMOVECOMPLETE) { PDEV_BROADCAST_HDR hDev = (PDEV_BROADCAST_HDR)Msg.LParam; if(hDev->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE) { if(DisconnBtn->Enabled) { DisconnBtn->Click(); } } } }

    答者:FFSB(搞点小资) 信誉:100 级别:user2 日期:2006-10-13 11:09:09 id:37208826

    上面抄得有点乱,将就看

    答者:sumoyu() 信誉:100 级别:user1 日期:2006-10-13 11:12:45 id:37208961

    多谢!我试试

    答者:sumoyu() 信誉:100 级别:user1 日期:2006-10-13 11:21:04 id:37209265

    g_UsbioID是什么?

    答者:FFSB(搞点小资) 信誉:100 级别:user2 日期:2006-10-13 11:51:19 id:37210214

    USB硬件ID,

    答者:sumoyu() 信誉:100 级别:user1 日期:2006-10-13 12:42:52 id:37211248

    如何来得到硬件ID? 我在调试时,跟踪发现插、拔USB硬盘后,Msg.WParam = DBT_DEVNODES_CHANGED

    答者:FFSB(搞点小资) 信誉:100 级别:user2 日期:2006-10-13 14:00:41 id:37213378

    DEVICE_NOTIFY_WINDOW_HANDLE ==> DEVICE_NOTIFY_WINDOW_HANDLE | DEVICE_NOTIFY_ALL_INTERFACE_CLASSES 就可以跟踪所有USB设备了

    答者:cczlp(不惑) 信誉:117 级别:star2 日期:2006-10-13 14:01:41 id:37213414

    当Msg.WParam = DBT_DEVNODES_CHANGED时, 取指定设备的个数,增加就是插入,减少就是移除。

    答者:sumoyu() 信誉:100 级别:user1 日期:2006-10-13 15:05:05 id:37215482

    拔去USB后会产生一个事件Msg.WParam == DBT_DEVICEREMOVECOMPLETE,另外还会产生一个事件 Msg.WParam = DBT_DEVNODES_CHANGED。拔去USB后,这两个事件下的代码都得到执行(好像是Msg.WParam = DBT_DEVNODES_CHANGED先执行的。) 另外请教能不能用一个函数得到所有USB的GUID。

    答者:FFSB(搞点小资) 信誉:100 级别:user2 日期:2006-10-13 15:31:02 id:37216498

    SetupDIxxxxx具题名字忘了,你查一下  

    最新回复(0)