/// <summary> /// Extract the Icon out of an AudioDevice /// </summary> /// <param name="audioDevice"></param> /// <param name="largeIcon"></param> /// <returns></returns> public static Icon ExtractIconFromAudioDevice(MMDevice audioDevice, bool largeIcon) { Icon ico; var iconKey = new IconKey(audioDevice.IconPath, largeIcon); if (IconCache.TryGetValue(iconKey, out ico)) { return(ico); } try { if (audioDevice.IconPath.EndsWith(".ico")) { ico = Icon.ExtractAssociatedIcon(audioDevice.IconPath); } else { var iconInfo = audioDevice.IconPath.Split(','); var dllPath = iconInfo[0]; var iconIndex = int.Parse(iconInfo[1]); ico = IconExtractor.Extract(dllPath, iconIndex, largeIcon); } } catch (Exception e) { AppLogger.Log.Error($"Can't extract icon from {audioDevice.IconPath}\n Ex: ", e); switch (audioDevice.DataFlow) { case DataFlow.Capture: ico = Resources.defaultSpeakers; break; case DataFlow.Render: ico = Resources.defaultMicrophone; break; default: throw new ArgumentOutOfRangeException(); } } IconCache.Add(iconKey, ico); return(ico); }
/// <summary> /// Extract an Icon form a given path /// </summary> /// <param name="path"></param> /// <param name="dataFlow"></param> /// <param name="largeIcon"></param> /// <returns></returns> public static Icon ExtractIconFromPath(string path, DataFlow dataFlow, bool largeIcon) { Icon ico; var key = $"{path}-${largeIcon}"; if (IconCache.Contains(key)) { return((Icon)IconCache.Get(key)); } try { if (path.EndsWith(".ico")) { ico = Icon.ExtractAssociatedIcon(path); } else { var iconInfo = path.Split(','); var dllPath = iconInfo[0]; var iconIndex = int.Parse(iconInfo[1]); ico = IconExtractor.Extract(dllPath, iconIndex, largeIcon); } } catch (Exception e) { Log.Error(e, "Can't extract icon from {path}", path); switch (dataFlow) { case DataFlow.Capture: return(DefaultMicrophone); case DataFlow.Render: return(DefaultSpeakers); default: throw new ArgumentOutOfRangeException(); } } IconCache.Add(key, ico, CacheItemPolicy); return(ico); }