ネットワークドライブの割り当てや切断などをするときに、どのドライブレターが使われているのかを調べるときはGetLogicalDrivesを利用する。これにより使われているものとそうでないものとを簡単に判別できる。
//
// 使用中のドライブレター取得
//
//ドライブ名が文字列として列挙されて返る。例:AとC、Dドライブが使われているなら"ACD"
//
bool GetUsedDriveLetter(TCHAR* pszLetter,int nSize)
{
int i;
int nIndex;
TCHAR cbDrive;
DWORD dwDrives;
if(pszLetter == NULL || nSize <= 0)
return false;
dwDrives = ::GetLogicalDrives();
ZeroMemory(pszLetter,sizeof(TCHAR) * nSize);
nIndex = 0;
cbDrive = _T('A');
for(i = 0; i <= 'Z' - 'A'; i++)
{
if(! ((1 << i) & dwDrives))
continue;
pszLetter[nIndex++] = cbDrive + i;
if(nIndex < nSize)
continue;
return (dwDrives << (i+1)) ? false : true;
}
return true;
}
void Test(void)
{
bool ret;
TCHAR pszLetters[256];
ret = GetUsedDriveLetter(pszLetters,256);
if(ret)
::MessageBox(NULL,pszLetters,_T(""),MB_OK);
else
::MessageBox(NULL,_T("失敗しました"),_T(""),MB_OK);
}
