DBT_DEVICEARRIVAL事件,同时接入若干设备

柳承枫 2016-07-14 03:29:05
DBT_DEVICEARRIVAL事件,同时接入若干设备,只能捕获2个吗,谁试过?就是同时插入3~4个U盘,DBT_DEVICEARRIVAL事件只能捕获2个
...全文
1848 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
柳承枫 2016-10-20
  • 打赏
  • 举报
回复
引用 20 楼 zhao4zhong1 的回复:
[quote=引用 19 楼 jackyleu 的回复:] [quote=引用 18 楼 zhao4zhong1 的回复:] [quote=引用 17 楼 jackyleu 的回复:] [quote=引用 16 楼 zhao4zhong1 的回复:] 搜“devcon”?
搜了,这个不是一个tools吗[/quote] 使用这个tools应该可以毫无遗漏地列出当前连接的所有设备的详细信息。[/quote] 列表应该没问题,我意思是事件,那个插入的事件捕获问题[/quote] 事件捕获有遗漏的原因之一是事件处理时间太长。 试试使用一个FIFO缓冲区,将事件捕获和事件处理解耦。[/quote] 这个也试过,感觉事件重叠覆盖了
赵4老师 2016-10-20
  • 打赏
  • 举报
回复
引用 19 楼 jackyleu 的回复:
[quote=引用 18 楼 zhao4zhong1 的回复:] [quote=引用 17 楼 jackyleu 的回复:] [quote=引用 16 楼 zhao4zhong1 的回复:] 搜“devcon”?
搜了,这个不是一个tools吗[/quote] 使用这个tools应该可以毫无遗漏地列出当前连接的所有设备的详细信息。[/quote] 列表应该没问题,我意思是事件,那个插入的事件捕获问题[/quote] 事件捕获有遗漏的原因之一是事件处理时间太长。 试试使用一个FIFO缓冲区,将事件捕获和事件处理解耦。
柳承枫 2016-10-20
  • 打赏
  • 举报
回复
引用 18 楼 zhao4zhong1 的回复:
[quote=引用 17 楼 jackyleu 的回复:] [quote=引用 16 楼 zhao4zhong1 的回复:] 搜“devcon”?
搜了,这个不是一个tools吗[/quote] 使用这个tools应该可以毫无遗漏地列出当前连接的所有设备的详细信息。[/quote] 列表应该没问题,我意思是事件,那个插入的事件捕获问题
赵4老师 2016-10-20
  • 打赏
  • 举报
回复
捕获到重叠事件时,拆成一系列单独的事件。
赵4老师 2016-10-19
  • 打赏
  • 举报
回复
搜“devcon”?
赵4老师 2016-10-19
  • 打赏
  • 举报
回复
引用 17 楼 jackyleu 的回复:
[quote=引用 16 楼 zhao4zhong1 的回复:] 搜“devcon”?
搜了,这个不是一个tools吗[/quote] 使用这个tools应该可以毫无遗漏地列出当前连接的所有设备的详细信息。
柳承枫 2016-10-19
  • 打赏
  • 举报
回复
引用 16 楼 zhao4zhong1 的回复:
搜“devcon”?
搜了,这个不是一个tools吗
柳承枫 2016-10-18
  • 打赏
  • 举报
回复
引用 14 楼 SXJIAKE 的回复:
把 dbcv_unitmask 打出来看看,并在计算器中以二进制查看到底有几个 bit 设置为 1,说明新增了几个卷。
case WM_DEVICECHANGE:
    switch (wParam)
    {
    case DBT_DEVICEARRIVAL:
        if (((PDEV_BROADCAST_HDR)lParam)->dbch_devicetype == DBT_DEVTYP_VOLUME)
        {
            PDEV_BROADCAST_VOLUME pdvol = (PDEV_BROADCAST_VOLUME)lParam;
            printf("0x%08X\n", pdvol->dbcv_unitmask);
        }
        break;

    case DBT_DEVICEREMOVECOMPLETE:
        if (((PDEV_BROADCAST_HDR)lParam)->dbch_devicetype == DBT_DEVTYP_VOLUME)
        {
            PDEV_BROADCAST_VOLUME pdvol = (PDEV_BROADCAST_VOLUME)lParam;
            printf("0x%08X\n", pdvol->dbcv_unitmask);
        }
        break;

    default:
        break;
    }
    break;
这个试过了,同时接入3个,打印2个或者1个,同时接入4个,打印2个
「已注销」 2016-08-04
  • 打赏
  • 举报
回复
把 dbcv_unitmask 打出来看看,并在计算器中以二进制查看到底有几个 bit 设置为 1,说明新增了几个卷。
case WM_DEVICECHANGE:
    switch (wParam)
    {
    case DBT_DEVICEARRIVAL:
        if (((PDEV_BROADCAST_HDR)lParam)->dbch_devicetype == DBT_DEVTYP_VOLUME)
        {
            PDEV_BROADCAST_VOLUME pdvol = (PDEV_BROADCAST_VOLUME)lParam;
            printf("0x%08X\n", pdvol->dbcv_unitmask);
        }
        break;

    case DBT_DEVICEREMOVECOMPLETE:
        if (((PDEV_BROADCAST_HDR)lParam)->dbch_devicetype == DBT_DEVTYP_VOLUME)
        {
            PDEV_BROADCAST_VOLUME pdvol = (PDEV_BROADCAST_VOLUME)lParam;
            printf("0x%08X\n", pdvol->dbcv_unitmask);
        }
        break;

    default:
        break;
    }
    break;
zgl7903 2016-07-25
  • 打赏
  • 举报
回复
引用 10 楼 jackyleu 的回复:
[quote=引用 9 楼 zgl7903 的回复:] 个人建议, 接收到消息以后 扫一下, GetDriveType(szDrv ) == DRIVE_REMOVABLE
接到什么消息?DBT_DEVICEARRIVAL这个吗[/quote] WM_DEVICECHANGE
柳承枫 2016-07-25
  • 打赏
  • 举报
回复
引用 9 楼 zgl7903 的回复:
个人建议, 接收到消息以后 扫一下, GetDriveType(szDrv ) == DRIVE_REMOVABLE
接到什么消息?DBT_DEVICEARRIVAL这个吗
柳承枫 2016-07-25
  • 打赏
  • 举报
回复
引用 11 楼 zgl7903 的回复:
[quote=引用 10 楼 jackyleu 的回复:] [quote=引用 9 楼 zgl7903 的回复:] 个人建议, 接收到消息以后 扫一下, GetDriveType(szDrv ) == DRIVE_REMOVABLE
接到什么消息?DBT_DEVICEARRIVAL这个吗[/quote] WM_DEVICECHANGE[/quote] 这个也试了下,还是同时接入3个USB存储设备,只能处理1个,接入4个,只能处理2个
柳承枫 2016-07-25
  • 打赏
  • 举报
回复
引用 11 楼 zgl7903 的回复:
[quote=引用 10 楼 jackyleu 的回复:] [quote=引用 9 楼 zgl7903 的回复:] 个人建议, 接收到消息以后 扫一下, GetDriveType(szDrv ) == DRIVE_REMOVABLE
接到什么消息?DBT_DEVICEARRIVAL这个吗[/quote] WM_DEVICECHANGE[/quote] 能说详细一些吗,目的是什么,我要获取盘符,只能是DBT_DEVTYP_VOLUME这个吧?
柳承枫 2016-07-22
  • 打赏
  • 举报
回复
没人知道,没人尝试过吗,准确的说是,DBT_DEVTYP_VOLUME收不到
zgl7903 2016-07-22
  • 打赏
  • 举报
回复
个人建议, 接收到消息以后 扫一下, GetDriveType(szDrv ) == DRIVE_REMOVABLE
柳承枫 2016-07-15
  • 打赏
  • 举报
回复
引用 5 楼 easunlee 的回复:
没有试过一下子快速拔除/插入这么多USB设备。。 猜测一下: The system broadcasts the DBT_DEVICEARRIVAL device event when a device or piece of media has been inserted and becomes available. 也是反应周期的事? 建议使用 DBT_DEVNODES_CHANGED 来检测。
而且这个DBT_DEVNODES_CHANGED,没办法获取U盘盘符
柳承枫 2016-07-15
  • 打赏
  • 举报
回复
引用 5 楼 easunlee 的回复:
没有试过一下子快速拔除/插入这么多USB设备。。 猜测一下: The system broadcasts the DBT_DEVICEARRIVAL device event when a device or piece of media has been inserted and becomes available. 也是反应周期的事? 建议使用 DBT_DEVNODES_CHANGED 来检测。
我开发环境是win10,后来放在win7下跑,比win10效果好些
路杨 2016-07-14
  • 打赏
  • 举报
回复
没有试过一下子快速拔除/插入这么多USB设备。。 猜测一下: The system broadcasts the DBT_DEVICEARRIVAL device event when a device or piece of media has been inserted and becomes available. 也是反应周期的事? 建议使用 DBT_DEVNODES_CHANGED 来检测。
柳承枫 2016-07-14
  • 打赏
  • 举报
回复
引用 3 楼 boylafong 的回复:
能获得的个数不只2个 但同时插入是什么意思?几个人一起插这样测试?
对,按照顺序接入,只要有时间差,都可以接收,但是同时接入,几乎是一个时间的情况下,丢失 我是找了一个usb hub做的实验,上面接满了U盘,然后把这个hub接入usb口
boylafong 2016-07-14
  • 打赏
  • 举报
回复
能获得的个数不只2个 但同时插入是什么意思?几个人一起插这样测试?
加载更多回复(2)

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧