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

由于笔者很严谨,我又加入了另一个步骤 GetBurnFolderPath,调用 SHGetSpecialFolderPath 得到一个 CString 形式的刻录文件目录:

CString path = burner.GetBurnFolderPath();

Figure 1 CD 驱动的刻录属性

如果你想刻录音乐,或找到其它刻录驱动器(可能有多个),或者获得更详细的信息:如制造或型号,或者驱动器是 CD-R 还是 CD-RW?为此,Windows XP 提供了 IMAPI 来实现这些特性,它是 Image Mastering API 的缩写,不要和 MAPI——用于 e-mail 的 Messaging API 混淆。唉!要记住这些缩写真是难啊。IMAPI 提供了 COM 接口来寻找可刻机驱动器和写入数据,或者最新射频探头调谐到光光彩照人的塑胶唱盘上。有关 IMAPI 接口信息概要参见 Figure 2。

由于与 COM 的冲突会引起较大的问题,笔者写了一个小的类库,IMAPITools,解决了大多数问题。为了说明怎么用这个类库笔者还写了一个程序 CDINFO。CDINFO 在控制台窗口中显示CD记录体的信息。

只要掌握了 IMAPI,CD,刻录就不难。但 IMAPI 很庞大,在讲完基础后再简要的说一下这个问题。

Figure 3 CDINFO

首先,CDINFO创建了一个对象显示驱动器盘符和刻录路径。接着,创建 CDiscMaster 打开IMAPI session:

CDiscMaster dm; // create IDiscMaster
 if (!dm.Open()) {
   printf("Oops: ...");
   return;
 }

时间: 2025-01-27 07:13:35

用IMAPI实现CD刻录和设备查找的相关文章

电脑无法识别出用Direct CD刻录的光盘

  使用Direct CD刻录的光盘,在电脑播放的时候,却无法识别出该光盘.这是怎么回事呢? Direct CD是一款使用UDF文件系统记录数据的软件,因此,采用ISO9660标准的设备是无法读取用Direct CD刻录的光盘.建议安装UDF Reader软件,它可以识别用Direct CD格式化过的光盘.

音乐CD刻录大师怎么用,音乐CD刻录大师使用方法

音乐可以放松人们的心情,本文来教大家使用音乐CD刻录大师把你喜欢的音乐收藏起来. 1. 启动cd刻录大师 2. 点击"新增文件" 出现下图: 把歌曲全部选上.方法:点中一首后,ctrl+a,然后点"打开",即可全选了. 3. 如果歌曲过多,总时间超出79分钟,就会出现下图: 这时需要删除一首或者几首,删除后,看绿色进度条的区别: 这时你就可以点击"开始刻录" 如果你的光驱里没有放光盘,就会出现下图: 点击"OK",打开光驱,放

cd刻录简单图文教程

今天小编简单教大家如何刻录cd光盘!让初学的朋友也能体会到刻录光盘的乐趣!经常刻录的人应该都晓得NERO刻录软件 吧,它有强大的刻录功能和稳定的性能,新版的Nero刻录软件包含更多高级的CD, DVD, Blu-ray 与 HD DVD的刻录选项.此外新版的刻录软件还提供Windows Vista Sidebar的工具帮助备份系统,功能更加的强大.Nero8 简体中文精简版体积由原来的1G多减少到现在的60多M,现在网速不够快的朋友可以享福了 nero 8 中文完美精简绿色版下载: 软件名称:N

nero怎么刻录cd

  首先下载安装nero后打开,把要刻录的光盘放入刻录机中. 并且选择刻录音乐 添加要加入的曲目文件 点下一步 进行数据CD刻录 这样就OK了

Nero软件怎么刻录cd光盘

  1.首先下载安装nero后打开,把要刻录的光盘放入刻录机中,并且选择刻录音乐. 2.添加要加入的曲目文件. 3.进行数据CD刻录.

如何刻录车载cd光盘?

  为了打发无聊的时间,车友朋友可以带一个车载cd光盘方便自己在车上听歌等,而如今人人都可以实现自己刻录车载cd光盘了,如果自己的cd光盘不是空白光盘还可以擦除光盘来重新刻录,下面为大家带来刻录车载cd光盘的三种方法. 一.nero刻录车载cd教程 1.首先我们需要做的就是下载一款Nero软件,安装完成会在桌面产生一个图标 2.接着我们把CD光盘放进光驱里面,然后就可以打开软件准备开始记录了. 3.还有一个要确认的是,你的光驱必须是DVD刻录光驱,一般的普通光驱是不可以刻录光碟的,我们双击"打开

关于APE文件刻录音频CD的教程_应用技巧

首先你应该知道的什么是APE?APE文件用什么可以播放?答:APE是一种音频CD无损压缩格式.答:推荐用foobar2000,WINAMP安装插件(最新的版本不用了)也可以播放,WMP安装插件也可以播放. 好了现在做准备工作,你需要准备好以下几个软件:1.EAC 0952.Monkey Audio 397(就是所说的猴子)3.foobar2000 077(注意:必须完全安装才行)4.Alcohol.120 (就是所说的酒精)5.NeroBurning 在准备好以上软件后,你开始需要了解刻录音频C

鸟枪当炮 PowerPoint耍刻录

PowerPoint2003 中的"打包成 CD"功能可将一个或多个演示文稿以及支持文件复制到 CD 中.在默认情况下, PowerPoint2003 把播放器 打包到 CD 上,即使在其他未安装 PowerPoint的计算机上也可以运行,符合脱离软件平台运行的要求,而不用担心到其它的计算机上不能播放或者播放效果不正常. 一.操作系统要求 直接打包演示文稿到 CD 需要 Windows XP 或更高版本.如果是其他版本的Windows,可以先使用"打包成 CD"功能

PowerPoint2003如何打包刻录PPT

  PowerPoint 2003 中的"打包成 CD"功能可将一个或多个演示文稿以及支持文件复制到 CD 中.在默认情况下, PowerPoint2003 把播放器 打包到 CD 上,即使在其他未安装 PowerPoint的计算机上也可以运行,符合脱离软件平台运行的要求,而不用担心到其它的计算机上不能播放或者播放效果不正常. 一.操作系统要求 直接打包演示文稿到 CD 需要 Windows XP 或更高版本.如果是其他版本的Windows,可以先使用"打包成 CD"