midiOutMessage 函数向 MIDI 设备驱动程序发送消息。 此函数仅用于 MIDI API 不支持的特定于驱动程序的消息。
Syntax
MMRESULT midiOutMessage(
HMIDIOUT hmo,
UINT uMsg,
DWORD_PTR dw1,
DWORD_PTR dw2
);
参数
hmo
接收消息的 MIDI 设备的标识符。 必须将设备 ID 强制转换为 HMIDIOUT 句柄类型。 如果提供句柄而不是设备 ID,该函数将失败并返回MMSYSERR_NOSUPPORT错误代码。
uMsg
要发送的消息。
dw1
消息参数。
dw2
消息参数。
返回值
返回音频设备驱动程序返回的值。
注解
消息DRV_QUERYDEVICEINTERFACE查询 waveIn、waveOut、midiIn、midiOut 或 mixer 设备的设备接口名称。
对于 DRV_QUERYDEVICEINTERFACE, dwParam1 是指向调用方分配的缓冲区的指针,函数在其中写入包含设备接口名称的以 null 结尾的 Unicode 字符串。 如果设备没有设备接口,则字符串长度为零。
对于 DRV_QUERYDEVICEINTERFACE, dwParam2 指定缓冲区大小(以字节为单位)。 这是函数的输入参数。 调用方应指定大于或等于 DRV_QUERYDEVICEINTERFACESIZE 消息检索的缓冲区大小。
Windows Me 和 Windows 2000 及更高版本中支持DRV_QUERYDEVICEINTERFACE消息。 此消息仅适用于 waveInMessage、 waveOutMessage、 midiInMessage、 midiOutMessage 和 mixerMessage 函数。 系统截获此消息并返回相应的值,而不将消息发送到设备驱动程序。 有关系统截获 的 xxxMessage 函数的一般信息,请参阅 System-Intercepted 设备消息。
以下两个消息常量用于获取设备接口名称:
- DRV_QUERYDEVICEINTERFACESIZE
- DRV_QUERYDEVICEINTERFACE
有关详细信息,请参阅 “获取设备接口名称”。
消息 DRV_QUERYDEVICEINTERFACESIZE 查询保存设备接口名称所需的缓冲区大小。
对于 DRV_QUERYDEVICEINTERFACESIZE, dwParam1 是指向缓冲区大小的指针。 此参数指向函数向其写入所需缓冲区大小的 ULONG 变量(以字节为单位)。 大小包括名称字符串终止 null 的存储空间。 如果设备 ID 标识没有设备接口的设备,则大小为零。
对于 DRV_QUERYDEVICEINTERFACESIZE, dwParam2 未使用。 将此参数设置为零。
此消息仅适用于 waveInMessage、 waveOutMessage、 midiInMessage、 midiOutMessage 和 mixerMessage 函数。 系统截获此消息并返回相应的值,而不将消息发送到设备驱动程序。 有关系统截获 的 xxxMessage 函数的一般信息,请参阅 System-Intercepted 设备消息。
此消息检索的缓冲区大小表示为字节计数。 它指定保存包含设备接口名称的以 null 结尾的 Unicode 字符串所需的缓冲区大小。 调用方分配指定大小的缓冲区,并使用 DRV_QUERYDEVICEINTERFACE 消息检索设备接口名称字符串。
有关详细信息,请参阅 “获取设备接口名称”。
消息 DRV_QUERYDEVNODE 查询即插即用管理器分配给设备的 devnode 编号。
对于 DRV_QUERYDEVNODE, dwParam1 是指向调用方分配的 DWORD 变量的指针,函数将开发节点编号写入其中。 如果未向设备分配任何 devnode,该函数会将此变量设置为零。
对于 DRV_QUERYDEVNODE, dwParam2 未使用。 将此参数设置为零。
在 Windows 2000 及更高版本中,消息始终返回MMSYSERR_NOTSUPPORTED。 此消息仅适用于 waveInMessage、 waveOutMessage、 midiInMessage、 midiOutMessage 和 mixerMessage 函数。 系统截获此消息并返回相应的值,而不将消息发送到设备驱动程序。 有关系统截获 的 xxxMessage 函数的一般信息,请参阅 System-Intercepted 设备消息。
消息 DRV_QUERYMAPPABLE 查询映射器是否可以使用指定的设备。
对于 DRV_QUERYMAPPABLE, dwParam1 未使用。 将此参数设置为零。
对于 DRV_QUERYMAPPABLE, dwParam2 未使用。 将此参数设置为零。
此消息仅适用于 waveInMessage、 waveOutMessage、 midiInMessage、 midiOutMessage、 mixerMessage 和 auxOutMessage 函数。 系统截获此消息并返回相应的值,而不将消息发送到设备驱动程序。 有关系统截获 的 xxxMessage 函数的一般信息,请参阅 System-Intercepted 设备消息。
当应用程序程序打开映射器而不是特定音频设备时,系统会在应用程序和可用设备之间插入映射器。 映射器通过将应用程序的要求映射到某个可用设备来选择适当的设备。 有关映射器的详细信息,请参阅 Microsoft Windows SDK 文档。
该 DRVM_MAPPER_CONSOLEVOICECOM_GET 消息检索首选语音通信设备的设备 ID。
对于 DRVM_MAPPER_CONSOLEVOICECOM_GET, dwParam1 是指向设备 ID 的指针。 此参数指向函数将当前首选语音通信设备的设备 ID 写入其中的 DWORD 变量。 如果没有任何设备可限定为首选语音通信设备,该函数将写入值(-1)。
对于 DRVM_MAPPER_CONSOLEVOICECOM_GET, dwParam2 是指向状态标志的指针。 此参数指向函数向其写入设备状态标志的 DWORD 变量。 目前仅定义一个标志位:DRVM_MAPPER_PREFERRED_FLAGS_PREFERREDONLY。
此消息仅适用于 waveInMessage 和 waveOutMessage 函数。 当调用方使用DRVM_MAPPER_CONSOLEVOICECOM_GET消息调用这两个函数时,调用方必须将设备 ID 指定为WAVE_MAPPER,然后将此值强制转换为适当的句柄类型。 对于 waveInMessage、 waveOutMessage、 midiInMessage、 midiOutMessage 或 mixerMessage 函数,调用方必须分别将设备 ID 转换为 HWAVEIN、HWAVEOUT、HMIDIIN、HMIDIOUT 或 HMIXER 类型的句柄。 请注意,如果调用方提供有效的句柄而不是此参数的设备 ID,函数将失败并返回错误代码MMSYSERR_NOSUPPORT。
系统截获此消息并返回相应的值,而不将消息发送到设备驱动程序。 有关系统截获 的 xxxMessage 函数的一般信息,请参阅 System-Intercepted 设备消息。
此消息提供了一种方法,用于确定哪个设备是语音通信的首选设备,这与 DRVM_MAPPER_PREFERRED_GET 消息相反,该消息确定哪些设备是所有其他音频功能的首选设备。
例如,语音通信的首选 waveOut 设备可能是耳机中的耳机,但所有其他音频功能的首选 waveOut 设备可能是一组立体声扬声器。
在 dwParam2 指向的 DWORD 位置中设置DRVM_MAPPER_PREFERRED_FLAGS_PREFERREDONLY标志位时, waveIn 和 waveOut API 仅使用当前的首选语音通信设备,并且如果首选设备不可用,则不会搜索其他可用设备。 waveInMessage 或 waveOutMessage 调用输出的标志适用于 waveIn 和 waveOut API 的首选语音通信设备,无论调用 waveInMessage 还是 waveOutMessage。 有关详细信息,请参阅 首选 Voice-Communications 设备 ID。
该 DRVM_MAPPER_PREFERRED_GET 消息检索首选音频设备的设备 ID。
对于 DRVM_MAPPER_PREFERRED_GET, dwParam1 是指向设备 ID 的指针。 此参数指向函数向其写入当前首选设备的设备 ID 的 DWORD 变量。 如果没有任何设备可限定为首选设备,该函数将写入值(-1)。
对于 DRVM_MAPPER_PREFERRED_GET, dwParam2 是指向状态标志的指针。 此参数指向函数向其写入设备状态标志的 DWORD 变量。 目前仅定义一个标志位(仅针对 waveInMessage 和 waveOutMessage 调用):DRVM_MAPPER_PREFERRED_FLAGS_PREFERREDONLY。
此消息仅适用于 waveInMessage、 waveOutMessage 和 midiOutMessage 函数。 当调用方使用DRVM_MAPPER_PREFERRED_GET消息调用这些函数时,调用方必须先将设备 ID 指定为WAVE_MAPPER(对于 waveInMessage 或 waveOutMessage)或MIDI_MAPPER(对于 midiOutMessage),然后将此值强制转换为适当的句柄类型。 对于 waveInMessage、 waveOutMessage 或 midiOutMessage 函数,调用方必须将设备 ID 分别转换为句柄类型 HWAVEIN、HWAVEOUT 或 HMIDIOUT。 请注意,如果调用方提供有效的句柄而不是此参数的设备 ID,函数将失败并返回错误代码MMSYSERR_NOSUPPORT。
系统截获此消息并返回相应的值,而不将消息发送到设备驱动程序。 有关系统截获 的 xxxMessage 函数的一般信息,请参阅 System-Intercepted 设备消息。
此消息提供了一种确定一般音频功能首选设备的方法,这与 DRVM_MAPPER_CONSOLEVOICECOM_GET 消息不同,后者确定哪个设备是语音通信的首选设备。
在 dwParam2 指向的 DWORD 位置中设置DRVM_MAPPER_PREFERRED_FLAGS_PREFERREDONLY标志位时, waveIn 和 waveOut API 仅使用当前首选设备,如果首选设备不可用,则不会搜索其他可用设备。 请注意, midiOutMessage 函数不会输出此标志-- midiOut API 始终仅使用首选设备。 waveInMessage 或 waveOutMessage 调用输出的标志适用于 waveIn 和 waveOut API 的首选设备,无论调用 waveInMessage 还是 waveOutMessage。
xxx消息函数接受此值来代替有效的设备句柄,以便应用程序能够确定默认设备 ID,而无需先打开设备。 有关详细信息,请参阅 访问首选设备 ID。
要求
| Requirement | 价值 |
|---|---|
| 最低支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
| 支持的最低服务器 | Windows 2000 Server [仅限桌面应用] |
| 目标平台 | Windows操作系统 |
| Header | mmeapi.h (包括 Windows.h) |
| Library | Winmm.lib |
| DLL | Winmm.dll |