修改发送DBT_DEVICEMREMOVECOMPLETE之前的时间

Modify time until DBT_DEVICEREMOVECOMPLETE is sent

本文关键字:时间 DEVICEMREMOVECOMPLETE DBT 修改      更新时间:2023-10-16

是否有方法触发Windows的USB设备发现,以便更快地检测到已删除的设备?

我拔下了一个USB串行调制解调器(USB插头,而不是串行插头)。我想检测一旦检测到拔出就发送的DBT_DEVICEREMOVECOMPLETE事件(这就是我的假设)。事件检测按需工作,有时在移除后1秒发送,有时在删除后几分钟发送。

有没有办法缩短刷新间隔,或者用另一种方法加快此事件的发送速度?

好吧,这里的问题是在Windows决定检测到删除后发送DBT_DEVICEMREMOVECOMPLETE,你不能影响这一点,至少在一般情况下不会。有各种因素使Windows更快或更慢地完成这项工作(设备类型、设备的当前"数据流"、设备本身),而且操作系统版本之间也有所不同。我发现在某些情况下,从注册表中删除之前插入该USB端口的USB设备的引用在一定程度上有所帮助(有各种实用程序)。

在极端情况下,由于这是一条Windows广播消息(未排队),在处理前一条消息之前,不会再发送另一条消息。因此,您可能根本不会收到它!要解决这个问题,请保持消息处理的快速和简单,并且在调试时不要在那里设置断点。

此外,拥有一个单独的Windows和线程来处理USB设备到达/移除通知可能会有所帮助。

但是,根据我的经验,轮询不会有帮助,因为主要问题似乎是Windows用于检测删除的标准。从该事件到您收到消息的时间很短。当然,在您的情况下,这可能不是真的——要找到答案,请使用SysInternal Process Monitor之类的工具。根据你在那里看到的情况,你可能会做一些事情来加快速度。