WEB开发网
开发学院软件开发VC 用 IMAPI 实现 CD 刻录和设备查找 阅读

用 IMAPI 实现 CD 刻录和设备查找

 2006-07-20 11:40:22 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 我读了你在 January 2004 中有关获取驱动器盘符以及用 GetDriveType 函数判定某个磁盘是否为 CD(DRIVE_CDROM)的专栏文章,但我如何才能知道 CD 驱动器是不是刻录设备呢?此外,用 IMAPI 实现 CD 刻录和设备查找,如何将文件写入可擦写 CD?W

本文示例源代码或素材下载

我读了你在 January 2004 中有关获取驱动器盘符以及用 GetDriveType 函数判定某个磁盘是否为 CD(DRIVE_CDROM)的专栏文章,但我如何才能知道 CD 驱动器是不是刻录设备呢?此外,如何将文件写入可擦写 CD?Windows XP 允许你用 Windows 资源管理拖拽文件,并将其写入CD。你能否告知有没有什么方法从我的程序中实现,而不需要用户购买第三方软件,如:Nero 或者 Roxio? 有没有相关的 MFC 类可以实现这个功能?

MFC 没有提供 CD 刻录的类,但 Windows Xp 内置了写入 CD 的支持。如果只是复制文件和目录,可以用 shell''s ICDBurn 接口。如果要刻录音频或更近一步的实现对音频的控制,那么下面会介绍一个专用的 API。

用 ICDBurn 有三个步骤,HasRecordableDrive 扫描系统内可写的CD驱动器,找到的话返回TRUE。GetRecorderDriveLetter 返回可写驱动器的盘符。最后刻录指令通知 Windows 从“集结区”向可写 CD 拷贝数据。“集结区”是一个专用的文件夹,通常是“%userprofile%\Local Settings\Application Data\Microsoft\CD Burning”,但还是应该调用 SHGetFolderPath 和参数 CSIDL_CDBURN_AREA 获得准确的目录名。开发者会经常用到 SHGetFolderPath,因为用户会经常手动或用 PowerTools/TweakUI 等工具改变刻录的目录。

笔者写了一个很短的类 CCDBurn 来封装 ICDBurn。这个结构用 CLSID_CDBurn 调用 CoCreateInstance,读者可调试运行。 CCDBurn burner;
if (!burner.HasRecordableDrive()) {
  printf("Oops—No recordable drive!\n");
} else {
  CString dl =
    burner.GetRecorderDriveLetter();
  printf("Default Recorder drive letter =
    %s\n", (LPCTSTR)dl);
}
  驱动器盘符是在驱动器记录属性中启动CD记录功能的那个驱动器。只有一个驱动器可以设置这种属性。假定 HasRecordableDrive 返回TRUE,也就是电脑至少有一个可记录的CD驱动器,你要做的就是把文件拷贝到集结区内,这就是刻录。

1 2 3  下一页

Tags:IMAPI 实现 CD

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接