返回首页


在我们公司的项目,我们用WM_DEVICECHANGE消息检测的到来,并删除USB设备。应该将与其他几个实用程序运行的机器上运行的应用程序。几个月后,项目交付,客户端报道,有时即使USB设备插入,这是没有检测到。问题的问题... ...
经过一番调查,我们发现,如果我们把窗口一个顶层窗口(HWND_TOPMOST),不存在这样的问题。但是,什么是Z -顺序和上述问题之间的关系。后来,我们得到了数点,以确定的关系。WM_DEVICECHANGE是根据他们的Z ​​-顺序发送到所有的顶层窗口。这是在最上面的位置窗口收到消息的第一,那么只有下面的窗口等。如果一个窗口得到一个WM_DEVICECHANGE,如果在一段时间内没有处理的消息(在我的机器上,我认为这是20秒),该消息不会达到下的后续Windows。
现在一切都变得清楚地告诉我们,一些窗口的Z -顺序大于我们的应用程序窗口可能已经挂起或在20秒内没有处理的消息。因此,我们的窗口没有得到一个机会。此外,当我们提出我们的窗口顶层,这将是其中的第一个窗口的,从而减少窗户的数量,它上面得到红WM_DEVICECHANGE消息。以往我们没有找到一个妥善的解决办法,并转移到一个替代的方法来检测设备到达和清除。
我认为Windows可能不被使用的BroadcastSystemMessage()函数使用的BSF_FORCEIFHUNG标志,同时发送WM_DEVICECHANGE消息。

回答

评论会员:maxMESA 时间:2012/01/24
文章没有显示解决方案
评论会员:AnandChavali 时间:2012/01/24
您好,

你检查你的消息泵循环吗?不烦人,有一些窗口总是最上面的用户?你如何解决这个问题呢?

能否请你抛出一些(更多)光

感谢和问候,
阿南德
评论会员:。hvtin 时间:2012/01/24
AnandChavali写道:你检查你的消息泵循环

消息循环我的应用程序doesn't NY问题。
另一个应用程序的消息循环已挂起。
AnandChavali写道:"是不是恼人的有一些窗口总是最上面的用户?
即使窗口最上面的风格,它needen't可见。
AnandChavali写道:"你是如何解决了这个问题

他们解决了投票我猜。我们不能信任WM_DEVICECHANGE方法。

殿


评论会员:HightechRider 时间:2012/01/24
如果您的应用程序是不是不是一个最顶层窗口,你应该使用API​​函数:RegisterDeviceNotification()来解决这个问题。请参阅更详细的链接波纹管:

{A}

谢谢!

hvtin
评论会员:adesawed 时间:2012/01/24
?你说你"转移到另一种方法检测设备到达和删除",是什么