<html><head><style type='text/css'>p { margin: 0; }</style></head><body><div style='font-family: Arial; font-size: 10pt; color: #000066'>Hi TJG,<br><br>Thanks for your very helpful reply and code snippet. I'm happy that there seems to be a way to do this in windows. The application is multi-threaded with the MainThread being a wxPython MainLoop which monitors for events such as Shutdown (QUERY_END_SESSION) etc. It has to be the MainThread in order to receive the events.<br><br>Is it possible that the Win32_VolumeChangeEvent or Win32_DeviceChangeEvent events can be detected a seperate thread? The example "detect-device-insertion" uses an infinate loop win32gui.PumpMessages() for WM_DEVICECHANGE. We can't use this as our MainThread as it's already in the wx MainLoop().<br><br>Operating system wise, we have to support Ubuntu (hense the DeviceKit), Windows XP, Vista and 7. Scanning the list of devices isn't such a problem as we do it already; but of course the less we have to do the better!<br><br>Thanks everyone for your help.<br><br><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><div><hr style="width: 100%; height: 3px;"><span style="font-weight: bold;">Chris Jesse</span><font style="font-weight: bold; color: rgb(0, 0, 102); font-family: verdana,helvetica,sans-serif;" size="2"><br>Software Architect</font><font style="color: rgb(0, 0, 102); font-family: verdana,helvetica,sans-serif;" size="3"><span style="font-weight: bold;"><br><br><font size="2"><span style="font-family: verdana,helvetica,sans-serif;">Flight Data Services</span></font></span></font><font style="color: rgb(0, 0, 102); font-family: verdana,helvetica,sans-serif;" size="2"><font style="color: rgb(0, 0, 102);" size="2"><br>189-199 West Street, Fareham, PO16 0EN, UK</font></font><font style="color: rgb(0, 0, 102); font-family: verdana,helvetica,sans-serif;" size="2"><br>Tel: +44 (0) 1329 223663</font><font style="color: rgb(0, 0, 102); font-family: verdana,helvetica,sans-serif;" size="2"><br>Fax: +44 (0) 1329 223664</font><font style="color: rgb(0, 0, 102); font-family: verdana,helvetica,sans-serif;" size="2"><br><a href="http://www.flightdataservices.com/">http://www.flightdataservices.com</a></font><font style="color: rgb(0, 0, 102); font-family: verdana,helvetica,sans-serif;" size="2"><br><font size="1"><span style="color: rgb(204, 204, 204);">Registered in England, No 4041206, Address: 14 Brookmeadow, Fareham, PO15 5JH</span></font></font>                
</div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><br><br>----- Original Message -----<br>From: "Tim Golden" &lt;mail@timgolden.me.uk&gt;<br>To: python-win32@python.org<br>Sent: Friday, 12 February, 2010 08:56:44 GMT +00:00 GMT Britain, Ireland, Portugal<br>Subject: Re: [python-win32] USB Insertion Extrinsic Event exists?<br><br>On 11/02/2010 18:18, Chris Jesse wrote:<br>&gt; Hi All,<br>&gt;<br>&gt; I currently have a little program which looks for new USB removable media<br>&gt; to be inserted into a PC. It does so by polling (every 5 seconds) all<br>&gt; the drives within Win32_DiskDrive() and queries to find the ones which<br>&gt; PNPDeviceID has 'USBSTOR' within them and establishes that they are removable media<br>&gt; (I'm not interested in USB HDDs) and whether they have a partition or not.<br><br>You've got two, perhaps three approaches you could take here. One<br>is to use the WM_DEVICECHANGE windows message. I thought I had an<br>example in my list of How-Tos but I see that I don't. Here's an old<br>post illustratating a solution:<br><br>http://mail.python.org/pipermail/python-list/2004-January/887363.html<br><br>Using WMI you could look at either the Win32_VolumeChangeEvent or<br>the Win32_DeviceChangeEvent. Both are extrinsic so are basically<br>proxying the WM_DEVICECHANGE above; the first is a subclass of the second.<br><br>&lt;code&gt;<br>import wmi<br>c = wmi.WMI ()<br><br>print c.Win32_DeviceChangeEvent<br># schema info shows that it relies on WM_DEVICECHANGE<br><br>watcher = c.Win32_DeviceChangeEvent ()<br>event = watcher ()<br><br># inserts USB stick<br><br>print event<br><br>&lt;/code&gt;<br><br>However, on my WinXP box I'm not getting much information beyond<br>the fact of the event; not sure if that's because of some flaw<br>in my code or merely because XP doesn't support very much more<br>than that. I'll try to run some tests. At the worst, you'd only<br>need to scan the list of devices / volumes when an event occurs...<br><br>TJG<br>_______________________________________________<br>python-win32 mailing list<br>python-win32@python.org<br>http://mail.python.org/mailman/listinfo/python-win32<br></div></body></html>