On 12/02/2010 16:58, Chris Jesse wrote:
So it turns out that my description of the task was lacking in one simple, but critical, observation. We use removable media, usually a compact flash card, plugged into a USB adapter drive. The events get triggered for my pen drive, but when the compact flash card is inserted I get nothing - probably because the device is already plugged in.
OK; just tried it and I see what you mean. In my case, I'm using one of those card readers with four different-sized slots. It "pre-registers" as four drives so you don't get any further device change events. (I assume this is comparable to what you're doing...) All I can suggest is that you watch the Win32_DiskDrive instances with an InterfaceType of "USB" for a modification event and check whether the MediaLoaded has changed. Something like this: <code> import wmi c = wmi.WMI () watcher = c.Win32_DiskDrive.watch_for (InterfaceType="USB") while True: try: disk = watcher (timeout_ms=10000) print disk except wmi.x_wmi_timed_out: pass </code> If you know which device id will always be firing (eg the only slot I can use is PHYSICALDEVICE3 then you can build that into the query.
There's an interesting document attached which shows some potential C++ code; but I'm in a little out of my depth here - "help"!
About half of that is basically the code I posted here: http://local.timgolden.me.uk/python/win32_how_do_i/detect-device-insertion.html The other half deals with the case where you want to use this sort of technique but where you're in a service or otherwise don't have a top-level window. If the WMI stuff doesn't work for you and you need this kind of thing (and don't have/want a top-level window) then we can try to run something up on the basis of the article. TJG _______________________________________________ python-win32 mailing list python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32