判断光驱中是否有光盘,仍然可以使用GetDriveType和GetVolumeInformation函数实现。首先使用驱动器根路径作为GetDriveType和参数,如果返回值是DRIVE_CDROM,则说明此驱动器为光驱。然后使用GetVolumeInformation获取信息,如果成功,则说明存光盘已经放入。调用完成后GetVolumeInformation函数的第7个参数LPTSTR lpFileSystemNameBuffer存储的是文件系统的类别字符串,光盘一般是CDFS。如果调用GetVolumeInformation时返回FALSE,并且GetLastError返回21,则说明驱动器中未放入光盘。
GetLastError
获取在执行中本线程最近的一次错误。本函数是很多系统API返回执行错误原因的方法。可能使用SetLastError函数设置本线程的Last-Error值。GetLastError函数原型如下:◇参数无参数。◇返回值返回值类型为DWORD,表示本线程的Last-Error值。
[GetLastError函数常用于WinAPI执行返回错误,是最常用的API函数!可以和error lookup工具结合]
1 #include2 #include 3 #include 4 /* 预定义 */ 5 #define BUFSIZE 512 6 7 /* ************************************ 8 * int main( int argc, PCHAR argv[] ) 9 * 功能 应用程序主函数,根据输入的驱动器10 * 根路径参数判断是否为光驱,是否放11 * 入光盘。12 * 参数 驱动器根路径,比如“D:\”。13 **************************************/14 15 int main( int argc, PCHAR argv[] )16 {17 //存储文件系统类别名18 CHAR szFileSystemNameBuffer[BUFSIZE];19 DWORD dwLastError;20 DWORD dwFileSystemFlags;21 22 //判断是否输入运行时参数23 if( argc != 2 ) 24 {25 printf("请输入驱动器的根路径,比如: \"D:\\\"\n");26 return( -1 );27 }28 29 //判断输入的驱动器是否为CD\DVD ROM30 if(GetDriveTypeA(argv[1])!=DRIVE_CDROM)31 {32 printf("驱动器 %s 不是 CD/DVD ROM。\n",argv[1]);33 return( -1 );34 }35 36 //获取卷信息37 if (!GetVolumeInformationA(38 argv[1], NULL, 0,39 NULL,NULL,40 &dwFileSystemFlags,41 szFileSystemNameBuffer,42 BUFSIZE43 ))44 {45 dwLastError = GetLastError();46 if(dwLastError == 21)47 {48 printf("设备未就绪,请放入光盘!\n");49 return 0;50 }51 else52 {53 printf("GetVolumeInformation 错误 %d\n",dwLastError);54 return 0;55 }56 }57 printf ("光盘已经放入,文件系统类别 %s。\n",szFileSystemNameBuffer);58 return 0;59 }