我有一些计算机与简化的Windows中添加/删除存储设备不会自动驱动器号。 所以我必须find一种方法来检测添加/删除。 一种方式(我知道)是与WM_DEVICECHANGE消息。 在这些计算机上,只有WParam 7和LParam 0才会将消息发送到Windows。因此,当我的应用程序收到此消息时,可以运行我的检测代码。 问题是设备需要一些时间才能被完全识别。 同时我的应用程序被“轰炸”了WM_DEVICECHANGE消息的“成批”,检测代码甚至开始了6..7次。 为了解决我可以添加一个新的消息重新初始化的计时器; 如果在一段时间后(1..2秒),应用程序没有收到消息,则启动检测代码。 但我不喜欢这种方法100%,因为它没有考虑到其他因素,如计算机的速度,减慢Windows的其他程序,不同的存储设备types等等。事实上,检测代码完成后耽搁了这有点烦人。
有人知道更专业的解决scheme吗?
感谢您的任何帮助。
我昨天正在玩这些消息,在我的测试计划中,如果我过滤消息,我只能得到一个消息添加和一个删除。
看到我的博客更详细的描述。
这是真的,对于大多数情况下,你会得到无数的消息。 我对此的解决方案与您的解决方案类似,只是不使用定时器,而是使用线程。 在这种情况下,我的等待时间是15秒(在DBT_DEVICEARRIVAL之后)。
事实上,DBT_DEVICEARRIVAL就是您查看问题措辞时所要查找的内容。 当时即使有更多的通知, 设备也可以使用。 插入USB密钥时,出现以下情况:
出于您的目的,DBT_DEVNODES_CHANGED通知无关紧要。 你只对DBT_DEVICEARRIVAL感兴趣(德尔福公司说8000美元)。
另外,如果你用这些符号的名字,而不是他们的号码来引用这些信息,那真的很有帮助。