如何获取音频设备的图标路径

问题描述

我正在编写一个使用音频设备的AHK脚本。我正在使用Vista Audio library,并且添加了一些其他功能获取有关设备名称之外的其他数据。这些功能用于获取设备描述和设备图标:

GetDeviceDesc(device)
{
    static PKEY_Device_DeviceDesc
    if !VarSetCapacity(PKEY_Device_DeviceDesc)
        VarSetCapacity(PKEY_Device_DeviceDesc,20),VA_GUID(PKEY_Device_DeviceDesc :="{A45C254E-DF1C-4EFD-8020-67D146A850E0}"),Numput(2,PKEY_Device_DeviceDesc,16)
    VarSetCapacity(prop,16)
    VA_IMMDevice_OpenPropertyStore(device,store)
    ; store->GetValue(..,[out] prop)
    DllCall(NumGet(NumGet(store+0)+5*A_PtrSize),"ptr",store,&PKEY_Device_DeviceDesc,&prop)
    ObjRelease(store)
    VA_WStrOut(deviceDesc := NumGet(prop,8))
    return deviceDesc
}

GetDeviceIcon(device)
{
    static PKEY_DrvPkg_Icon
    if !VarSetCapacity(PKEY_DrvPkg_Icon)
        VarSetCapacity(PKEY_DrvPkg_Icon,VA_GUID(PKEY_DrvPkg_Icon :="{CF73BB51-3ABF-44A2-85E0-9A3DC7A12132}"),Numput(4,PKEY_DrvPkg_Icon,&PKEY_DrvPkg_Icon,&prop)
    ObjRelease(store)
    VA_WStrOut(deviceIcon := NumGet(prop,8))
    return deviceIcon
}

这两个函数都是VA.ahk中VA_GetDeviceName函数的略微修改版本:

VA_GetDeviceName(device)
{
    static PKEY_Device_FriendlyName
    if !VarSetCapacity(PKEY_Device_FriendlyName)
        VarSetCapacity(PKEY_Device_FriendlyName,VA_GUID(PKEY_Device_FriendlyName :="{A45C254E-DF1C-4EFD-8020-67D146A850E0}"),Numput(14,PKEY_Device_FriendlyName,&PKEY_Device_FriendlyName,&prop)
    ObjRelease(store)
    VA_WStrOut(deviceName := NumGet(prop,8))
    return deviceName
}

我的第一个函数用于获取设备描述,但是另一个函数用于获取图标路径,但不返回任何内容。除了尝试获取DrvPkg_Icon之外,我还尝试获取DeviceClass_Icon和DeviceClass_IconPath失败。

我有PKEY参考here和IProperty方法编号参考here

我不知道自己在做什么错。代码是否可能正常工作并且这些值是空的(根据WinAPI documentation,仅保证设备具有友好的名称,描述和界面友好的描述)?在哪种情况下,我还有另一种获取设备图标的方法

我不明白为什么它不起作用。谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)