【问题标题】:Getting the icon for an audio device获取音频设备的图标
【发布时间】:2020-01-19 15:52:23
【问题描述】:

在 Windows 的声音控制面板和音量混合器中,所有音频设备都有一个特定的图标集。

是否可以通过 Windows API 获取为设备设置的图标?

Sound Control Panel Volume Mixer

【问题讨论】:

  • 如果您在此处查看该答案:stackoverflow.com/questions/20938934/… AudioSession 类具有 IconPath 属性。
  • 我根据您的建议尝试过,但这不是我想要的。一方面,它在音频会话上运行,而不是音频设备。二、根据MSDN documentation“如果客户端没有调用IAudioSessionControl::SetIconPath来设置显示图标,则字符串为空。”
  • 我相信您在混音器中看到的是音频会话,而不是设备。无论如何,在我的代码中,我只是没有公开音频设备的所有属性,但您可以使用 Properties 字典获取它们。我刚刚修改了我的代码并在AudioDevice 类上添加了一个IconPath 属性。 docs.microsoft.com/en-us/windows-hardware/drivers/install/…
  • 是的,你是对的。我确定我试过了,但无论如何,这确实有效。

标签: winapi


【解决方案1】:

正如 Simon Mourier 在上述 cmets 中所建议的,有一个 PKEY 可以访问该数据。

您可以关注大部分this sample,只需将PKEY_Device_FriendlyName替换为PKEY_DeviceClass_IconPath。

简而言之,是这样的:

    // [...]

    IMMDevice *pDevice; // the device you want to look up
    HRESULT hr = S_OK;
    IPropertyStore *pProps = NULL;
    PROPVARIANT varName;

    hr = pDevice->OpenPropertyStore(STGM_READ, &pProps);
    EXIT_ON_ERROR(hr);

    PropVariantInit(&varName);

    hr = pProps->GetValue(PKEY_DeviceClass_IconPath, &varName);
    EXIT_ON_ERROR(hr);

    // [...]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 2015-08-14
    相关资源
    最近更新 更多