《枚举所有允许的驱动程序[行业内容]》由会员分享,可在线阅读,更多相关《枚举所有允许的驱动程序[行业内容](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类