In one of our projects in the company, we used WM_DEVICECHANGE
message to detect the arrival and removal of USB devices. The application was supposed to run on a machine in which will be running along with several other utility applications. Some months after the project delivery, client reported that, sometimes even if a USB device is plugged in, it is not detected. Problem problem.....
After some investigation, we found that if we make the window a top-level window (HWND_TOPMOST
), there is no such problem. But what’s the relation between the z-order and the above problem. Later, we got few more points to identify the relation.
- The
WM_DEVICECHANGE
is sent to all the top-level windows according to their z-order. That is, the window at the top most position receives the message first, then only the window below it and so one. - If a window got a
WM_DEVICECHANGE
and if it didn’t process the message within a period (in my machine, I think it was 20 secs), the message will not reach the subsequent windows under it.
Now everything became clear to us, some window whose z-order is greater than our application window might have hung or didn’t process the message within 20 seconds. Thus our window didn’t get a chance. Also, when we made our window top level, it would be one of the first windows to get WM_DEVICECHANGE
message so reducing the number of windows above it to get hung. However, we didn't find a proper solution for this and moved to an alternative method to detect device arrival and removal.
I think windows might not be using the BroadcastSystemMessage()
function with the BSF_FORCEIFHUNG
flag, while sending the WM_DEVICECHANGE
message.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.