问题描述
我正在编写一个使用音频设备的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 (将#修改为@)