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

http://tech.ddvip.com   2006年07月20日    社区交流

本文详细介绍用 IMAPI 实现 CD 刻录和设备查找

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

  我读了你在 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驱动器,你要做的就是把文件拷贝到集结区内,这就是刻录。

责编:豆豆技术应用

正在加载评论...