SoundGetInterface

检索声音设备或组件的原生 COM 接口.

InterfacePtr := SoundGetInterface(IID, Component, Device)

参数

IID

类型: 字符串

格式为 "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" 的接口标识符(GUID).

Component

类型: 字符串整数

如果为空或省略, 则检索由设备本身实现的接口. 否则, 指定组件的显示名称和/或索引. 例如, 1, "Line in""Line in:2".

有关详情, 请参阅 Component (Sound 函数).

Device

类型: 字符串整数

如果为空或省略, 则它默认为系统的默认回放设备(不一定是设备 1). 否则, 指定设备的显示名称和/或索引. 例如, 1, "Speakers", "Speakers:2""Speakers (Example HD Audio)".

有关详情, 请参阅 Device (Sound 函数).

返回值

类型: 整数

如果成功, 返回值是接口指针.

如果接口不支持, 返回值是零.

错误处理

如果无法找到设备或组件, 则抛出 TargetError. 否则失败时, 抛出 OSError.

备注

接口是从以下来源之一检索的:

一旦检索到接口指针, 可用 ComCall 来调用它的方法. 参考 Windows SDK 头文件来识别正确的方法索引.

接口指针必须在不再需要时通过传递给 ObjRelease 来释放. 这可以通过使用 ComValue "包装" 它来实现. 包装的值(对象) 可以直接传递给 ComCall.

Interface := ComValue(13, InterfacePtr)

Sound 函数, DeviceTopology API

示例

峰值表. 将显示带有当前峰值的工具提示, 但峰值为零时除外(无声音播放).

; IAudioMeterInformation
audioMeter := SoundGetInterface("{C02216F6-8C67-4B5B-9D00-D008E73E0064}")
if audioMeter
{
    try loop  ; 直到脚本退出或发生错误.
    {
        ; audioMeter->GetPeakValue(&peak)
        ComCall 3, audioMeter, "float*", &peak:=0
        ToolTip peak > 0 ? peak : ""
        Sleep 15
    }
    ObjRelease audioMeter
}
else
    MsgBox "Unable to get audio meter"