
Introduction
This is possibly my smallest article, and just shows a method of detecting when drives are added to or removed from the system. What you do with that information is up to you!
Background
I was answering a question from Akin Ocal yesterday, when Matthew Faithful came up with a much deeper answer than mine.
In a fit of pique / curiosity, I thought I'd come up with a different way of doing what he described, using Windows messages to do the heavy lifting. As I had to do a bit of digging from barely remembered details, I thought I'd share the work with others.
Using the code
I created a blank MFC dialog project, and added a handler for WM_DEVICECHANGE
. The MFC handler structure exists, but it could not be added with the Class Wizard, so I typed it in manually.
ON_WM_DEVICECHANGE ()
I then added the actual handler, which does nothing except log the fact that a drive has been added or removed.
BOOL CDriveDetectDlg::OnDeviceChange( UINT nEventType, DWORD dwData )
{
BOOL bReturn = CWnd::OnDeviceChange (nEventType, dwData);
DEV_BROADCAST_VOLUME *volume = (DEV_BROADCAST_VOLUME *)dwData;
CString log;
if (nEventType == DBT_DEVICEARRIVAL)
{
if (volume->dbcv_devicetype == DBT_DEVTYP_VOLUME)
{
for (int n = 0; n < 32; n++)
{
if (IsBitSet (volume->dbcv_unitmask, n))
{
log.Format ("Drive %c: Inserted\n", n + 'A');
m_DetectLog.AddString (log);
}
}
}
}
if (nEventType == DBT_DEVICEREMOVECOMPLETE)
{
if (volume->dbcv_devicetype == DBT_DEVTYP_VOLUME)
{
for (int n = 0; n < 32; n++)
{
if (IsBitSet (volume->dbcv_unitmask, n))
{
log.Format ("Drive %c: Removed\n", n + 'A');
m_DetectLog.AddString (log);
}
}
}
}
return bReturn;
}
As you can see, there's not a vast amount of code for the job.
Updates
- 27/6/2007 - Little drive icons added next to the drives being added / removed. The credit for steering me in the right direction (and providing some code for me to steal^h^h^h^h^hreuse) goes to dgendreau.
- 20/6/2007 - Original version posted.
I have now moved to Sweden for love, and recently married a lovely Swede.
-----------------
I started programming on BBC micros (6502) when I was six and never quite stopped even while I was supposed to be studying physics and uni.
I've been working for ~13 years writing software for machine control and data analysis. I now work on financial transaction transformation software, for a Software company in Gamlastan, Stockholm.
Look at my articles to see my excellent coding skills. I'm modest too!