Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#189

AW: TAudioVolume Komponente incl. System Mixer

  Alt 5. Jul 2018, 10:36
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
  Mit Zitat antworten Zitat