Windows-Windows API判断光驱是否有光盘

Windows-Windows API判断光驱是否有光盘

偏爱自由 发布于 2017-01-20 字数 40 浏览 1129 回复 2

Windows API如何判断光驱是否有光盘

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜柠檬 2017-08-24 2 楼

可以用GetDriveType判断是否有光驱,如果返回true表明有光驱,然后调用GetVolumeInformation,如果返回假且GetLastError为21时,则表明光驱中没有光盘。

想挽留 2017-02-12 1 楼

函数GetDriveType获取驱动器类型,其函数原型如下:
UINT GetDriveType(
LPCTSTR lpRootPathName // 驱动器根路径,如"C:\"
);
返回值为驱动器的类型,如DRIVE_FIXED表示硬盘,DRIVE_CDROM表示光盘等;

函数GetVolumeInformation获取逻辑驱动器信息,其函数原型如下:
BOOL GetVolumeInformation(
LPCTSTR lpRootPathName, // 输入参数,指向所要获取属性的驱动器根路径
LPTSTR lpVolumeNameBuffer, // 输出参数,返回驱动器名
DWORD nVolumeNameSize, // 输入参数,lpVolumeNameBuffer的内存缓冲区大小
LPDWORD lpVolumeSerialNumber, // 输出参数,驱动器序列号
LPDWORD lpMaximumComponentLength, // 输出参数,返回文件系统所支持的文件组成部分的最大值
LPDWORD lpFileSystemFlags, // 输出参数,属性可以判断多种驱动器属性值
LPTSTR lpFileSystemNameBuffer, // 输出参数,表示文件系统类型
DWORD nFileSystemNameSize // lpFileSystemNameBuffer的缓冲区大小
);
返回值为BOOL值,表示信息是否获取成功;

代码:

#include
#include

#define BUFSIZE 1024

int main()
{
CHAR szFileName[BUFSIZE];
DWORD dwLastError;
DWORD dwFileFlag;
LPSTR lPdrive="G:\";

if(GetDriveType(lPdrive)!=DRIVE_CDROM)
{
printf("驱动器%s不是CD/DVD ROM!n",lPdrive);
return -1;
}
if(!GetVolumeInformation(lPdrive,
NULL,
0,
NULL,
NULL,
&dwFileFlag,
szFileName,
BUFSIZE))
{
dwLastError=GetLastError();
if(dwLastError==87||dwLastError==21)
{
printf("设备未就绪,请插入光盘!n");
return 0;
}
else
{
printf("错误%dn",dwLastError);
return 0;
}
}
printf("光盘已经插入,文件系统类别为%sn",szFileName);
return 0;
}