Habe doch noch ein kleines Problem damit.
Zwar geht mit der MMDevApi-Methode das Einstellen der Lautstärke und Stummschaltung problemlos, und auch das Auslesen der Lautstärke klappt, jedoch erhalte ich beim Auslesen der Stummschaltung eine Zugriffsverletzung und ich habe keine Ahnung, woran das liegen könnte.
Im Prinzip ist die Funktion fast genau so wie beim Auslesen der Lautstärke (was ja klappt):
Delphi-Quellcode:
function GetMuteVista : Boolean;
var
mute : Boolean;
deviceEnumerator: IMMDeviceEnumerator;
defaultDevice: IMMDevice;
endpointVolume: IAudioEndpointVolume;
begin
endpointVolume := nil;
CoCreateInstance(CLASS_IMMDeviceEnumerator, nil, CLSCTX_INPROC_SERVER, IID_IMMDeviceEnumerator, deviceEnumerator);
deviceEnumerator.GetDefaultAudioEndpoint(eRender, eConsole, defaultDevice);
defaultDevice.Activate(IID_IAudioEndpointVolume, CLSCTX_INPROC_SERVER, nil, endpointVolume);
if endpointVolume = nil then Exit;
endpointVolume.GetMute(mute);
Result := mute;
end;
Die Funktion läuft auch problemlos durch und auch der Resultwert wird korrekt gesetzt. Allerdings erfolgt anschließend dennoch eine Zugriffsverletzung. Woran könnte das denn liegen? Muss noch etwas freigegeben werden? Mir sind diese
ActiveX-Geschichten eh immer ein Rätsel...