首先来说明3个函数:
(1)查看系统中驱动器,函数原型DWORD GetLogicalDrives(VOID)
//这个函数可以查看驱动器的个数,返回的是一个DWORD类型的数据,每一位代表相应的驱动盘是否存在,比如返回的一个数为0X0000
00FC(0000 0000 0000 0000 0000 0000 1111 1100)(252)其中最低位代表的是A盘,以此类推,在上数中di0位为0,第一位为0,第
2、3、4、5、6、7位为1,则说明A盘B盘不存在,C盘D盘E盘F盘G盘H盘存在,其余不存在盘;
DWORD DiskInfo; int DiskCount=0; //定义8位的整型变量
DiskInfo=GetLogicalDrives();
while(DiskInfo)
{
if(DiskInfo&1) //看该位是否为1,为1代表有对应的驱动器
DiskCount++;
DiskInfo>>=1; //DiskInfo=DiskInfo>>1,即DiskInfo右移一位
}
cout<<"该机器共有"<<DiskCount<<"个逻辑驱动器";
(2)取所有驱动器字符串信息,函数原型:
DWORD GetLogicalDriveStrings(
DWORD nBufferLength, // 缓冲区的长度
LPTSTRlpBuffer // 指向所有驱动器字符串的指针);
使用该函数一般分两个步骤:
①求所有驱动器的字符串信息长度
把0传递给API函数GetLogicalDriveStrings()的两个形参,函数的返回值就是所有驱动器的字符串信息长度。语句为:DriveStringLength=GetLogicalDriveStrings(0,NULL);
②动态分配内存空间保存所有驱动器的字符串信息
通过new函数在栈区申请内存于字符指针变量DriverStr,然后把上一步求的所有驱动器的字符串信息长度DriveStringLength和准备保存所有驱动器的字符串缓冲区地址
DriverStr传递给API函数GetLogicalDriveStrings()的两个形参,这样求得的所有驱动器的字符串信息就保存到缓冲区DriverStr中,注意每个驱动器字符串的长度为4,假设该机器
有A、B、C、D四个驱动器则在缓冲区DriverStr保存的内容是A:\<NULL>B:\<NULL>C:\<NULL>D:\<NULL><NULL>,其中<NULL>表示的是空字符,各个驱动器之间靠<NULL>
来分隔,最后以<NULL>结束。典型的代码为:
DriverStr=new char[DriveStringLength+1];
GetLogicalDriveStrings(DriveStringLength,(LPTSTR)DriverStr);
(3)取驱动器类型
倘若还要知道每个驱动器标识符各代表什么类型的驱动器时,如A:代表软盘还是硬盘,F:代表光盘还是U盘(可移动盘),就要使用API函数GetDriveType(),该函数的原型为:
UINT GetDriveType(LPCTSTR lpRootPathName //驱动器的根目录);
函数返回值为驱动器的类型,若值为DRIVE_REMOVABLE,代表的是可移动U盘,若值为DRIVE_FIXED,代表的是固定盘,若值为CDROM,代表的是光盘等。下面是一个实例:
#include<iostream.h>
voidmain()
{
DWORD DiskInfo;
char *DriverStr;
UINT type;
short DriveStringLength;
_int8 DiskCount=0;//定义8位的整型变量
DiskInfo=GetLogicalDrives();//取机器上的驱动器信息于DiskInfo
while(DiskInfo)
{
if(DiskInfo&1) //看该位是否为1,为1代表有对应的驱动器
DiskCount++;
DiskInfo>>=1;
}
cout<<"该机器共有"<<DiskCount<<"个逻辑驱动器\n";
DriveStringLength=GetLogicalDriveStrings(0,NULL);
//求整个驱动器的字符串信息的长度,每个驱动器字符串的长度为4
DriverStr=newchar[DriveStringLength+1];
GetLogicalDriveStrings(DriveStringLength,(LPTSTR)DriverStr);
//求整个驱动器的字符串信息于DriverStr
for(short i=0;i<(int)(DriveStringLength/4);i++)
{
type=GetDriveType(DriverStr+i*4);
//取驱动器的类型是软盘、硬盘、光盘、可移动U盘
if(type==DRIVE_CDROM) //如果是光驱的话
cout<<"驱动器"<<DriverStr+i*4<<"是光驱\n";
}
}