delphi - How to check if the system master volume is mute or unmute? -


i'm using code mute/unmute system master volume:

const   appcommand_volume_mute = $80000;   wm_appcommand = $319;  procedure tform1.button1click(sender: tobject); begin   // toggle mute/unmute   sendmessagew(handle, wm_appcommand, handle, appcommand_volume_mute); end; 

(got code https://stackoverflow.com/a/154128/1140885)

it works fine on xp (didn't test on win7 yet).
need method check (get) current "mute" state? mute or not.
ideas?


update: xp ended using code here: how master volume in windows xp? (thanks @sertac akyuz)

i had change single line:

mxlc.dwcontroltype := mixercontrol_controltype_volume; 

to:

mxlc.dwcontroltype := mixercontrol_controltype_mute; 

return value either 0 (not mute) or 1 (mute).

starting windows vista must use core audio sdk control windows audio. check if master volume muted must use iaudioendpointvolume.getmute method.

try sample code

{$apptype console}  uses   sysutils,   windows,   activex,   comobj;  const   class_immdeviceenumerator : tguid = '{bcde0395-e52f-467c-8e3d-c4579291692e}';   iid_immdeviceenumerator : tguid = '{a95664d2-9614-4f35-a746-de8db63617e6}';   iid_iaudioendpointvolume : tguid = '{5cdf2c82-841e-4546-9722-0cf74078229a}';  type   iaudioendpointvolumecallback = interface(iunknown)   ['{657804fa-d6ad-4496-8a60-352752af4f89}']   end;    iaudioendpointvolume = interface(iunknown)     ['{5cdf2c82-841e-4546-9722-0cf74078229a}']     function registercontrolchangenotify(audioendptvol: iaudioendpointvolumecallback): hresult; stdcall;     function unregistercontrolchangenotify(audioendptvol: iaudioendpointvolumecallback): hresult; stdcall;     function getchannelcount(out pinteger): hresult; stdcall;     function setmastervolumelevel(fleveldb: single; pguideventcontext: pguid): hresult; stdcall;     function setmastervolumelevelscalar(fleveldb: single; pguideventcontext: pguid): hresult; stdcall;     function getmastervolumelevel(out fleveldb: single): hresult; stdcall;     function getmastervolumelevelscaler(out fleveldb: single): hresult; stdcall;     function setchannelvolumelevel(nchannel: integer; fleveldb: double; pguideventcontext: pguid): hresult; stdcall;     function setchannelvolumelevelscalar(nchannel: integer; fleveldb: double; pguideventcontext: pguid): hresult; stdcall;     function getchannelvolumelevel(nchannel: integer; out fleveldb: double): hresult; stdcall;     function getchannelvolumelevelscalar(nchannel: integer; out flevel: double): hresult; stdcall;     function setmute(bmute: boolean; pguideventcontext: pguid): hresult; stdcall;     function getmute(out bmute: boolean): hresult; stdcall;     function getvolumestepinfo(pnstep: integer; out pnstepcount: integer): hresult; stdcall;     function volumestepup(pguideventcontext: pguid): hresult; stdcall;     function volumestepdown(pguideventcontext: pguid): hresult; stdcall;     function queryhardwaresupport(out pdwhardwaresupportmask): hresult; stdcall;     function getvolumerange(out pflvolumemindb: double; out pflvolumemaxdb: double; out pflvolumeincrementdb: double): hresult; stdcall;   end;    iaudiometerinformation = interface(iunknown)   ['{c02216f6-8c67-4b5b-9d00-d008e73e0064}']   end;    ipropertystore = interface(iunknown)   end;    immdevice = interface(iunknown)   ['{d666063f-1587-4e43-81f1-b948e807363f}']     function activate(const refid: tguid; dwclsctx: dword;  pactivationparams: pinteger; out pendpointvolume: iaudioendpointvolume): hresult; stdcall;     function openpropertystore(stgmaccess: dword; out ppproperties: ipropertystore): hresult; stdcall;     function getid(out ppstrid: plpwstr): hresult; stdcall;     function getstate(out state: integer): hresult; stdcall;   end;     immdevicecollection = interface(iunknown)   ['{0bd7a1be-7a1a-44db-8397-cc5392387b5e}']   end;    immnotificationclient = interface(iunknown)   ['{7991eec9-7e89-4d85-8390-6c703cec60c0}']   end;    immdeviceenumerator = interface(iunknown)   ['{a95664d2-9614-4f35-a746-de8db63617e6}']     function enumaudioendpoints(dataflow: toleenum; devicestate: sysuint; devcollection: immdevicecollection): hresult; stdcall;     function getdefaultaudioendpoint(edf: sysuint; er: sysuint; out dev :immdevice ): hresult; stdcall;     function getdevice(pwstrid: pointer; out dev: immdevice): hresult; stdcall;     function registerendpointnotificationcallback(pclient: immnotificationclient): hresult; stdcall;   end;  function ismastervolumemute : boolean; var   pendpointvolume: iaudioendpointvolume;   ldeviceenumerator: immdeviceenumerator;   dev: immdevice;   bmute: boolean; begin   if not succeeded(cocreateinstance(class_immdeviceenumerator, nil, clsctx_inproc_server, iid_immdeviceenumerator, ldeviceenumerator))    raiselastoserror;   if not succeeded(ldeviceenumerator.getdefaultaudioendpoint($00000000, $00000000, dev))    raiselastoserror;    if not succeeded( dev.activate(iid_iaudioendpointvolume, clsctx_inproc_server, nil, pendpointvolume))    raiselastoserror;    if not succeeded(pendpointvolume.getmute(bmute))    raiselastoserror   else   result:=bmute; end;   begin  try     coinitialize(nil);     try       writeln(format('master volume mute ? : %s',[booltostr(ismastervolumemute, true)]));           couninitialize;     end;  except     on e:exception         writeln(e.classname, ':', e.message);  end;  writeln('press enter exit');  readln; end. 

Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -