我正在监听 WM_DEVICECHANGE 的消息循环,当我移除或推动网络摄像头时,WM_DEVICECHANGE 出现两次,并带有相同的 MSG(具有相同的 HWND、UINT、WPARAM 和 LPARAM)。如何解决?
这是可以预料的。尽管 wParam 和 lParam应该不同以指示设备状态更改的不同阶段,但知道存在重复消息并不奇怪。
如果我没记错的话,我们在代码中所做的是当我们收到 WM_DEVICECHANGE 事件时执行以下任一操作:
一旦第一个进来,在接下来的几秒钟内忽略所有后续通知。
或者只是使用 WM_DEVICECHANGE 作为提示而不是事实。当我们收到这样的消息时,我们将使用适当的 API 重新枚举设备列表,并查看自上次枚举以来是否有任何更改。如果新列表与原始列表相同,则无事可做。