Für die Technik versierten..
Hier der Trick wie es mit den Icons Funktioniert.
Ich habe beim debuggen herausgefunden das es einen nicht dokumentierten PropertyKey dafür gibt.
Und andere..
PKEY_DEVICE_DESCRIPTION, PKEY_DEVICE_INTERFACE_FRIENDLY_NAME...
Hier mal der für die Icons..
In der Funktion
function TAudioVolume.OnPropertyValueChanged(DeviceId: PWideChar; Key: PROPERTYKEY): HResult;
Diesen Key habe ich mir jetzt angelegt.
Delphi-Quellcode:
PKEY_DEVICE_ICON: TPropertyKey = (
fmtid: (D1:$259ABFFC; D2:$50A7; D3:$47CE;
D4:($AF, $08, $68, $C9, $A7, $D7, $33, $66));
pid: 12);
Und hier hole ich mir dann den IconPfad..
Delphi-Quellcode:
function GetDeviceInfo(Device: IMMDevice): TDeviceInfo;
var
pvIconPath: PROPVARIANT;
IconBuf:
array [0 .. 127]
of WideChar;
IconPath: PWideChar;
begin
//....
// IconPath
PropVariantInit(pvIconPath);
HR := propertyStore.GetValue(PKEY_DEVICE_ICON, pvIconPath);
if HR <> S_OK
then
raise Exception.Create('
Unable to retrieve IconPath for a device !');
if pvIconPath.vt = VT_LPWSTR
then
begin
IconPath := @IconBuf[0];
StrCopy(IconPath, pvIconPath.pwszVal);
Result.IconPath := IconPath;
end;
end;
Vielleicht kann es ja mal jemand gebrauchen.
gruss