解説
メディアのイジェクトはWindows 9x系とWindows NT系で方法が異なり、また、その方法自体 が結構複雑で面倒。そのためここでは簡単にメディアを取り出せるようにOSを判別するクラス を作成した。ここで示したソースコードはOSの自動判別部分のみしか含んでいない。実際のメディア取り 出し処理は基底クラスであるCDnpMediaEjectNtとCDnpMediaEject9xに実装している。これら のクラスについては「CD-ROMのイジェクト(Win9x) 」 と「CD-ROMのイジェクト(WinNT/2000/XP)」に 書かれている。
使用例
CDnpMediaEject cEject;
cEject.EjectVolume(_T('F'));
ソースコード
//
// メディアのイジェクト(OS自動判別)
//
// Windows NT/2000/XP系は以下のURLを参照
// http://support.microsoft.com/kb/q165721/
//
// Windows95/98/Me系は以下のURLを参照
// http://support.microsoft.com/kb/q168180/
//
class CDnpMediaEject : public CDnpMediaEjectNt, public CDnpMediaEject9x
{
public:
//
// メディアのイジェクト
//
bool EjectVolume(TCHAR cDriveLetter,DWORD dwTimeouts=5000)
{
BOOL ret;
OSVERSIONINFO sInfo;
ZeroMemory(&sInfo,sizeof(OSVERSIONINFO));
sInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
ret = ::GetVersionEx(&sInfo);
if(ret == FALSE)
return false;
//Windows 9x系
if(sInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
return CDnpMediaEject9x::EjectVolume(cDriveLetter);
//Windows NT系
if(sInfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
return CDnpMediaEjectNt::EjectVolume(cDriveLetter,dwTimeouts);
return false;
}
};







