WINMM

介绍

DLL 文件是winmm 或者 winmm.dll,DLL 名称为Windows Multimedia, API描述是winmm.dll是Windows多媒体相关应用程序接口,用于低档的音频和游戏手柄。 系统文件winmm.dll是存放在Windows系统文件夹中的重要文件,通常情况下是在安装操作系统过程中自动创建的,对于系统正常运行来说至关重要。除非用户电脑被木马病毒、或是流氓软件篡改导致文件丢失、损坏等现象,否则不建议用户对该类文件进行随意的修改。该dll位于:C:\Windows\System32\winmm.dll。

MCI,即Media control interface, 媒体控制接口, 通过MCI的一些相关函数, 可以做到对媒体的控制, 例如播放音乐或视频, 常见的函数有 mciSendString, mciExecute, PlaySound, 这些函数均位于 winmm.dll 中。

函数汇总

auxGetDevCaps 查询指定的辅助输出设备以确定其性能

auxGetNumDevs 检取系统中存在的辅助输出设备的数量

auxGetVolume 返回指定的辅助输出设备的当前卷设备

auxOutMessage 向指定的辅助输出设备发送一条消息

auxSetVolume 在指定的辅助输出设备中设置卷

CloseDirver 关闭指定的可安装驱动器

DefDriverProc 为任何不由可安装驱动器处理的消息提供的缺省处理

Drivercallback 调用一个回调函数,发送一条消息给窗口或将一个线程的阻塞解除

DrvGetModuleHandle 返回包含指定可安装驱动器模块的实例句柄

DrvsendMessage 把指定的消息发送给可安装驱动器

GetDriverModuleHandle 返回包含指定可安装驱动器模块的实例句柄

joyGetDevCaps 查询指定的游戏杆设备以确定其性能

joyGetNumDevs 返回系统支持的游戏杆设备的数量

joyGetPos 查询指定的游戏杆设备的位置和活动性

joyGetPosEx 查询一个游戏杆设备的位置和它的按扭状态

joyGetThreshold 查询指定的游戏杆设备的当前移动阈值

joyReleaseCapture 释放由JoySetCapture函数设置的在指定游戏杆设备上的捕获

joySetCapture 发送一个游戏杆消息到指定的窗口

joySetThreshold 设置指定的游戏杆设备的移动阈值

mciGetCreatorTask 为指定的MCI设备检取其创建的任务

mciGetDeviceID 返回和打开设备名相匹配的设备标识符

mciGetErrorString 检取描述指定媒介控制接口错误代码的字符串

mciGetYieldProc 返回和媒介控制接口的WAIT标志相关的回调函数的地址

mciSendCommand 向指定的媒介控制接口设备发送一条命令

mciSendString 向指定的媒介控制接口设备发送一个字符串

mciSetYieldProc 设置一个过程地址,在MCI设备因指定了WAIT标志而等待一个命令完成时,该过程被周期性调用

midiConnect 将指定的MIDI输入设备连接到输出设备

midiDisconnect 断开MIDI输入设备和输出设备的连接

midiInAddBuffer 向指定的音乐仪器数字接口的输入设备增加一个缓冲区

midiInClose 关闭指定的音乐仪器数字接口的输入设备

midiInGetDveCaps 查询指定的音乐仪器数字接口的输入设备,以确定其性能

midiInGetErrorText 检取有关音乐仪器数字接口的输入设备指定错误的文本说明

midiInGetID 获得一个音乐一起数字接口的输入设备的标识符

midiInGetNumDevs 检取系统中音乐仪器数字接口的输入设备的数量

midiInMessage 向指定的音乐仪器数字接口的输入设备驱动器发送一条消息

midiInOpen 打开指定的音乐仪器数字接口的输入设备

midiInPrepareHeader 为音乐仪器数字接口的输入设备准备一个缓冲区

midiInReset 在给定的MIDI输入设备上输入,并将所有挂起的输入缓冲区标记为已执行的

midiInStart 启动在指定的音乐仪器数字接口的输入设备上的输入

midiInStop 停止在给定的音乐仪器数字接口的输入设备上的输入

midiInUnprepareHeader 消除由midiInPrepareHeader函数完成的准备

midiOutCacheDrumPatches 请求内部的一个MIDI合成设备预装指定的基于键的击打音色

midiOutCachePatches 请求内部的音乐仪器数字接口的合成设备预装指定的音色集

midiOutClose 关闭指定的音乐仪器数字接口的输出设备

midiOutGetDevCaps 查询指定的音乐仪器数字接口的输出设备,以确定其性能

midiOutGetErrorText 检取有关MIDI输出设备指定采取的文本说明

midiOutGetID 检取指定的MIDI输出设备的标识符

midiOutGetNumDevs 检取系统中存在的MIDI输出设备的数量

midiOutGetVolume 返回一个MIDI输出设备的当前卷设置

midiOutLongMsg 向指定的MIDI输出设备发送一条系统专用的MIDI消息

midiOutMessage 向一MIDI输出设备驱动器发送一条消息

midiOutOpen 打开指定的MIDI输出设备进行回放

midiOutPrepareHeader 为MIDI输出设备准备一个缓冲区

midiOutReset 为指定的MIDI输出设备关闭所有MIDI通道上的所有标志

midiOutSetVolume 设置一个MIDI输出设备的卷

midiOutShortMsg 向指定的MIDI输出设备发送一条短MIDI消息

midiOutUnprepareHeader 清除由midiOutPrepareHeader函数完成的准备

midiStreamClose 关闭一个打开的MIDI流

midiStreamOpen 为输出,打开一个MIDI流

midiStreamOut 在MIDI输出设备上播放或排队一个MIDI数据流

midiStreamPause 暂停一个MIDI流的播放

midiStreamPosition 在一个MIDI流中检取当前位置

midiStreamProperty 设置或检取与MIDI输出设备相关MIDI数据流的特性

midiStreamRestart 重新启动一个暂停的MIDI流

midiStreamStop 关掉指定MIDI输出设备的所有MIDI通道

mixerClose 关闭指定的混频器

mixerGetControlDetails 检取和一个声频指线路相关的单一控件的细节

mixerGetDevCaps 查询指定的混频器以确定其性能

mixerGetID 获取指定混频器的标识符

mixerGetLineContrils 检取和一个声频线路相关的一个或多个控件

mixerGetLineInfo 检取混频器有关特有线路的信息

mixerGetNumDevs 返回系统中存在的混频器的数量

mixerMessage 把一个定制混频器驱动器消息直接发送给混频器驱动器

mixerOpen 打开指定的混频器,在应用程序关闭该句柄前保证该设备不被移走

mixerSetControlDetails 设置和一个声频指线路相关的单一控件的细节

mmioAsvance 填充一个文件的IO缓冲区

mmioAscend 取出一个RIFF文件块

mmioClose 关闭有mmioOpen打开的文件

mmioCreateChunk 创建由mmioOpen函数打开的RIFF文件中的一个块

mmioDescend 进入由mmioOpen函数打开的RIFF文件的块中,并查找一个块

mmioFlush 把文件缓冲区的数据写入磁盘中

mmioGetInfo 检取有关由mmioOpen函数创建的RIFF文件的信息

mmioInstallIOProcA 装入或删除一个自定义的IO过程

mmioOpen 为输入输出打开一个文件

mmioRead 从由mmioOpen函数打开的文件中读取指定字节数的数据

mmioRename 重新命名指定的文件

mmioSeek 改变由mmioOpen函数打开的文件中的当前指针位置

mmioSendMessage 向与指定文件相联系的IO过程发送一条消息

mmioSetBuffer 允许或禁止文件缓冲区的IO,或改变这个缓冲区,或改变这个缓冲区的大小

mmioSetInfo 更新从被打开文件中检取的信息

mmioStringToFOURCC 把一个以NULL结束的字符串转换成一个4字符代码

mmioWrite 向由mmioOpen函数打开的文件中写入指定字节数的数据

mmsystemGetVersion 返回多媒体扩展系统软件的当前版本号

OpenDriver 打开一个可安装驱动器实例,并用缺省设置或指定值初始化该实例

PlaySound 播放一个波形声音

SendDriveMessage 向指定的可安装驱动器发送一条消息

SndPlaySound 播放一个由文件名或由登记的[sound]段的入口指定的波形声音

timeBeginPeriod 设置应用程序或驱动程序使用的最小定时器分辨率

timeEndPeriod 清除应用程序或驱动程序使用的最小定时器分辨率

timeGetDevCaps 查询定时器设备以确定其性能

timeGetSystemTime 检取从WINDOWS开始已逝去的毫秒数

timeGetTime 检取从WINDOWS开始已逝去的毫秒数,此函数比上一条函数开销小

timeKillEvent 毁掉指定的定时器回调事件

timeSetEvent 设置一个定时器回调事件

waveInAddBuffer 向波形输入设备添加一个输入缓冲区

WaveInClose 关闭指定的波形输入设置

waveInGetDevCaps 查询指定的波形输入设备以确定其性能

waveInGetErrorText 检取由指定的错误代码标识的文本说明

waveInGetID 获取指定的波形输入设备的标识符

waveInGetNumDevs 返回系统中存在的波形输入设备的数量

waveInGetPosition 检取指定波形输入设备的当前位置

waveInMessage 发送一条消息给波形输入设备的驱动器

waveInOpen 为录音而打开一个波形输入设备

waveInPrepareHeader 为波形输入准备一个输入缓冲区

waveInReset 停止给定的波形输入设备的输入,且将当前位置清零

waveInStart 启动在指定的波形输入设备的输入

waveInStop 停止在指定的波形输入设备上的输入

waveInUnprepareHeader 清除由waveInPrepareHeader函数实现的准备

waveOutBreakLoop 中断给定的波形输出设备上一个循环,并允许播放驱动器列表中的下一个块

waveOutClose 关闭指定的波形输出设备

waveOutGetDevCaps 查询一个指定的波形输出设备以确定其性能

waveOutGetErrorText 检取由指定的错误代码标识的文本说明

waveOutGetID 检取指定的波形输出设备的标识符

waveOutGetNumDevs 检取系统中存在的波形输出设备的数量

waveOutGetPitch 查询一个波形输出设备的当前音调设置

waveOutGetPlaybackRate 查询一个波形输出设备当前播放的速度

waveOutGetPosition 检取指定波形输出设备的当前播放位置

waveOutGetVolume 查询指定波形输出设备的当前音量设置

waveOutMessage 发送一条消息给一个波形输出设备的驱动器

waveOutOpen 为播放打开一个波形输出设备

waveOutPause 暂停指定波形输出设备上的播放

waveOutPrepareHeader 为播放准备一个波形缓冲区

waveOutRestart 重新启动一个被暂停的波形输出设备

waveOutSetPitch 设置一个波形输出设备的音调

waveOutSetPlaybackRate 设置指定波形输出设备的速度

waveOutSetVolume 设置指定的波形输出设备的音量

waveOutUnprepareHeader 清除由waveOutPrepareHeader函数实现的准备

waveOutWrite 向指定的波形输出设备发送一个数据块

### winmm.lib 的使用方法 `winmm.lib` 是 Windows 提供的一个静态链接库,主要用于多媒体功能的支持。它包含了诸如音频播放、MIDI 控制等功能的实现。以下是关于 `winmm.lib` 的具体使用方法: #### 1. 头文件包含 为了能够正常使用 `winmm.lib` 中的功能,需要先引入对应的头文件 `<mmsystem.h>`[^3]。 ```cpp #include <mmsystem.h> ``` 此头文件定义了许多与多媒体相关的结构体和函数声明。 --- #### 2. 链接库指定 为了让编译器知道需要链接 `winmm.lib` 库,在源代码中可以通过以下两种方式进行设置: ##### 方法一:通过 pragma 指令 可以在代码中加入如下语句来自动链接 `winmm.lib`: ```cpp #pragma comment(lib, "winmm.lib") ``` 这条指令会通知编译器在构建项目时链接该库。 ##### 方法二:手动配置项目属性 如果使用的是 Visual Studio 等 IDE,则可以直接修改项目的链接器选项: - 打开 **Project Properties** -> **Linker** -> **Input** - 在 **Additional Dependencies** 字段中添加 `winmm.lib`[^1] 这种方法适用于更复杂的工程环境或者不希望依赖特定编译器指令的情况。 --- #### 3. 函数调用示例 下面是一个简单的例子展示如何利用 `winmm.lib` 来播放声音文件[^5]: ```cpp #include <windows.h> // 包含基本Windows API支持 #include <mmsystem.h> // 包含多媒体API支持 #pragma comment(lib, "winmm.lib") int main() { char command[] = "open \"example.wav\" type waveaudio alias MediaFile"; // 发送命令打开媒体文件 mciSendString(command, NULL, 0, NULL); // 开始播放 mciSendString("play MediaFile", NULL, 0, NULL); Sleep(5000); // 让程序暂停几秒以便听到音乐 // 停止并关闭资源 mciSendString("stop MediaFile", NULL, 0, NULL); mciSendString("close MediaFile", NULL, 0, NULL); return 0; } ``` 上述代码片段展示了如何通过 `mciSendString()` 函数控制音视频文件的操作流程。 --- #### 4. 可能遇到的问题及其解决办法 有时可能会发现某些情况下(比如 DLL 文件内部),调用像 `mciSendString` 这样的函数会出现异常行为或死循环现象[^4]。这通常是因为线程模型冲突或者是未正确初始化 COM 组件等原因引起。针对这种情况可尝试以下措施之一: - 明确设定当前线程为单线程公寓模式 (STA),即在主线程入口处加上 `CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)` 调用; - 如果可能的话改用其他替代方案完成相同目的操作而避开此类问题; 另外值得注意的一点是确保目标平台上确实存在所要访问的声音设备以及相应的驱动程序安装完好无损。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值