枚举所有允许的驱动程序[行业内容]

上传人:壹****1 文档编号:467785986 上传时间:2023-12-18 格式:DOC 页数:8 大小:42.50KB
返回 下载 相关 举报
枚举所有允许的驱动程序[行业内容]_第1页
第1页 / 共8页
枚举所有允许的驱动程序[行业内容]_第2页
第2页 / 共8页
枚举所有允许的驱动程序[行业内容]_第3页
第3页 / 共8页
枚举所有允许的驱动程序[行业内容]_第4页
第4页 / 共8页
枚举所有允许的驱动程序[行业内容]_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《枚举所有允许的驱动程序[行业内容]》由会员分享,可在线阅读,更多相关《枚举所有允许的驱动程序[行业内容](8页珍藏版)》请在金锄头文库上搜索。

1、枚举所有允许的驱动程序 使用CODECs压缩Wave音频概要微软的Win95和WinNT操作系统都包含有能够压缩解压缩Wave音频流的CODECs。将你的wave 音频以压缩形式保存不但能够减少对存储空间的需求,在网络上传送时也能减少数据传输 的时间。对ACM有了简单了解后,现在可以要求它枚举出系统中当前所有的驱动程序。我们在程序中所 调用的枚举函数使用回调函数来汇报每个设备的数据,这在Windows编程是一种很普遍的方法。 下面的调用就是枚举当前ACM所管理的所有设备:/ 枚举所有允许的驱动程序 printf("Enabled drivers: ");mmr = acmD

2、riverEnum(DriverEnumProc, 0, 0);if (mmr) show_error(mmr);如同其它多媒体函数,许多ACM函数调用返回一MMRESULT值,指出了可能发生的错误。此值为0 表示函数成功执行。现在,让我们看看枚举回调函数DriverEnumProc,它由系统中的每一个驱 动程序调用:BOOL CALLBACK DriverEnumProc(HACMDRIVERID hadid, DWORD dwInstance, DWORD fdwSupport) printf(" id: %8.8lxH", hadid);printf(" s

3、upports: ");if (fdwSupport & ACMDRIVERDETAILS_SUPPORTF_ASYNC) printf(" async conversions ");if (fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CODEC) printf(" different format conversions ");if (fdwSupport & ACMDRIVERDETAILS_SUPPORTF_CONVERTER) printf(" same format

4、conversions ");if (fdwSupport & ACMDRIVERDETAILS_SUPPORTF_FILTER) printf(" filtering ");/ 获得一些具体信息ACMDRIVERDETAILS dd;dd.cbStruct = sizeof(dd);MMRESULT mmr = acmDriverDetails(hadid, &dd, 0);if (mmr) printf(" "); show_error(mmr);else printf(" Short name: %s "

5、;, dd.szShortName);printf(" Long name: %s ", dd.szLongName);printf(" Copyright: %s ", dd.szCopyright);printf(" Licensing: %s ", dd.szLicensing);printf(" Features: %s ", dd.szFeatures);printf(" Supports %u formats ", dd.cFormatTags);printf(" Supp

6、orts %u filter formats ", dd.cFilterTags);/ 打开驱动程序HACMDRIVER had = NULL;mmr = acmDriverOpen(&had, hadid, 0);if (mmr) printf(" "); show_error(mmr);else DWORD dwSize = 0;mmr = acmMetrics(had, ACM_METRIC_MAX_SIZE_FORMAT, &dwSize);if (dwSize cbSize = LOWORD(dwSize) - sizeof(WAVEFO

7、RMATEX);pwf->wFormatTag = WAVE_FORMAT_UNKNOWN;ACMFORMATDETAILS fd;memset(&fd, 0, sizeof(fd);fd.cbStruct = sizeof(fd);fd.pwfx = pwf;fd.cbwfx = dwSize;fd.dwFormatTag = WAVE_FORMAT_UNKNOWN;mmr = acmFormatEnum(had, &fd, FormatEnumProc, 0, 0); if (mmr) printf(" ");show_error(mmr);fre

8、e(pwf);acmDriverClose(had, 0);return TRUE; / 继续 枚举驱动程序向回调函数传递了描述驱动程序所支持类型的一组标志。一些驱动程序可以异步 操作,而另一些驱动程序则不能。一些驱动程序能够将一种wave数据格式转换成另一种格 式(称作CODECs),而另一些驱动程序仅能完成过滤操作,其输入输出格式是一样的。注 意ACM维护着这类数据及驱动程序的名字,版权信息等等,这样我们可以不必装载或打开 指定的驱动程序就可以得到这些数据。这样很方便,譬如当需将数据放在列表框中由用户 选择时。要获得有关某一驱动程序能力更多的详细信息,必须装载驱动程序并打开它,可通过调用 acmOpenDriver实现。一旦驱动程序打开,可请求枚举它所支持的wave数据格式。同时有一 个小问题-尽管所有wave格式描述结构基于WAVEFORAMTEX,许多格式使用此结构的扩展形 式来保存其特定的信息。如果我们想枚举所有格式,需要知道为此结构分配多少供驱动 程序填写详细信息的空间。可通过向acmMetrics函数传递ACM_METRIC_MAX_SIZE_FORMAT标 志得到所需的最大的结构的尺寸。 1互联b类

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号