【问题标题】:WM_DEVICECHANGE comes twice when disconnecting/connecting deviceWM_DEVICECHANGE 在断开/连接设备时出现两次
【发布时间】:2017-05-25 15:02:08
【问题描述】:

我正在我的消息循环中监听 WM_DEVICECHANGE,当我移除或插入我的网络摄像头时,WM_DEVICECHANGE 会出现两次,并带有相同的 MSG(具有相同的 HWND、UINT、WPARAM 和 LPARAM)。如何解决?

【问题讨论】:

  • 实际复制的wParam 值是多少?该值告诉您如何解释lParam 值,该值将是一个指向包含有关更改的更详细信息的特定于事件的结构的指针。你在看那个细节吗?

标签: c++ winapi


【解决方案1】:

这是意料之中的。虽然 wParam 和 lParam 应该 不同以指示设备状态更改的不同阶段,但知道有重复消息并不让我感到惊讶。

如果我没记错的话,我们在代码中所做的是,当我们收到 WM_DEVICECHANGE 事件时,会执行以下任一操作:

  1. 一旦第一个进来,在接下来的几秒钟内忽略所有后续通知。

  2. 或者只是使用 WM_DEVICECHANGE 作为提示而不是事实。当我们收到这样的消息时,我们将使用适当的 API 重新枚举设备列表,并查看自上次枚举以来是否有任何变化。如果新列表与原始列表相同,则无需执行任何操作。

【讨论】:

  • 好建议,但为什么会出现多条消息?
  • 可能是因为 USB 设备在技术上是多个设备的组合。例如,网络摄像头既是 USB 摄像头又是 USB 麦克风。
  • 您会认为即使设备是多个设备的组合,您仍然可以通过 windows api 以某种方式区分它们。如果您不介意查看我的问题,这是一个类似的问题,我试图限制这些到达/移除以更快地设置设备通信。但是,我的问题是,在这些多次到达/移除停止之前,我的设备似乎无法读取数据。 stackoverflow.com/questions/56655681/…
  • 这种情况已经很久了。他们很快解决这个问题的可能性为零。对于它的价值,前几天我确实不得不处理与WM_SETTINGCHANGE 相关的类似问题。更改您的窗口颜色,您的窗口会收到该消息 5-10 次。
猜你喜欢
  • 1970-01-01
  • 2017-05-06
  • 2014-07-17
  • 1970-01-01
  • 2011-10-09
  • 2018-07-27
  • 2011-10-08
  • 2020-05-08
  • 1970-01-01
相关资源
最近更新 更多