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