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
[email protected]
http://mail.python.org/mailman/listinfo/python-win32