检测USB插入和移除事件

问者: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具题名字忘了,你查一下
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值