用 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; 驱动器盘符是在驱动器记录属性中启动CD记录功能的那个驱动器。只有一个驱动器可以设置这种属性。假定 HasRecordableDrive 返回TRUE,也就是电脑至少有一个可记录的CD驱动器,你要做的就是把文件拷贝到集结区内,这就是刻录。
if (!burner.HasRecordableDrive()) {
printf("Oops—No recordable drive!\n");
} else {
CString dl =
burner.GetRecorderDriveLetter();
printf("Default Recorder drive letter =
%s\n", (LPCTSTR)dl);
}
责编:豆豆技术应用
- VC/VC++按钮设计专题
- VC/VC++ 菜单专题
- VC/VC++ 工具条专题
- VC/VC++ 对话框教程
- VC/VC++ 报表教程
- VC/VC++ 控件
- VC/VC++ GDI
- Visual Studio 2008
- VC/VC++ MFC教程
- VC/VC++ QQ
- VC/VC++ Socket编程
- VC/VC++ 钩子编程
- TangramMini组件应用教程
- VC/VC++ 窗体
- VC/VC++ ADO 教程
- Windows CE 教程
- VC/VC++ DLL(动态链接库)编程
- VC/VC++ PDFlib
- VC与MATLAB编程
- VC/VC++ DirectShow 教程
- VC++入门视频教程
- VC/VC++ COM组件设计与应用
- VC/VC++ ATL
- VC/VC++ WTL
- VC/VC++ 定制调试诊断工具和程序
- VC/VC++ 进程
- VC/VC++ Win32
- VC/VC++ WMI
- VC/VC++ 消息
- 更多VC/VC++专题……