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

发布于 2017-01-20 22:49:01 字数 29 浏览 1259 评论 2

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

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

评论(2

甜柠檬 2017-08-24 21:15:30

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

想挽留 2017-02-12 16:18:49

函数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;
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文