Hiermit gehts dann:
Code: Alles auswählen
#CLSCTX_INPROC_SERVER = $1
#CLSCTX_INPROC_HANDLER = $2
#CLSCTX_LOCAL_SERVER = $4
#CLSCTX_REMOTE_SERVER = $10
#CLSCTX_SERVER = (#CLSCTX_INPROC_SERVER | #CLSCTX_LOCAL_SERVER | #CLSCTX_REMOTE_SERVER)
#CLSCTX_ALL = (#CLSCTX_INPROC_HANDLER | #CLSCTX_SERVER)
Enumeration; EDataFlow
#eRender
#eCapture
#eAll
#EDataFlow_enum_count
EndEnumeration
Enumeration;ERole
#eConsole
#eMultimedia
#eCommunications
#ERole_enum_count
EndEnumeration
Interface IMMDeviceEnumerator Extends IUnknown
EnumAudioEndpoints(dataFlow, dwStateMask, *ppDevices);
GetDefaultAudioEndpoint(dataFlow, role, ppEndpoint);
GetDevice(pwstrId, ppDevice);
RegisterEndpointNotificationCallback(pClient);
UnregisterEndpointNotificationCallback(pClient);
EndInterface
Interface IMMDevice Extends IUnknown
Activate(iid, dwClsCtx, pActivationParams, ppInterface);
OpenPropertyStore( stgmAccess, ppProperties);
GetId(ppstrId);
GetState(pdwState);
EndInterface
Interface IAudioEndpointVolume Extends IUnknown
RegisterControlChangeNotify( *pNotify)
UnregisterControlChangeNotify( *pNotify)
GetChannelCount( *pnChannelCount)
SetMasterVolumeLevel( fLevelDB.f)
SetMasterVolumeLevelScalar( fLevel.f,pguidEventContext)
GetMasterVolumeLevel(*pfLevelDB)
GetMasterVolumeLevelScalar(*pfLevel)
SetChannelVolumeLevel(nChannel,fLevelDB.f,pguidEventContext)
SetChannelVolumeLevelScalar( nChannel,fLevel.f,pguidEventContext)
GetChannelVolumeLevel( nChannel,*pfLevelDB.f)
GetChannelVolumeLevelScalar( nChannel,*pfLevel.f)
SetMute( bMute, pguidEventContext)
GetMute( *pbMute)
GetVolumeStepInfo( *pnStep, *pnStepCount)
VolumeStepUp( pguidEventContext)
VolumeStepDown( pguidEventContext)
QueryHardwareSupport( *pdwHardwareSupportMask)
GetVolumeRange( *pflVolumeMindB, *pflVolumeMaxdB, *pflVolumeIncrementdB)
EndInterface
Procedure GetEndPointVolume(*endpointvolume)
CoInitialize_(#Null);, #COINIT_APARTMENTTHREADED | #COINIT_DISABLE_OLE1DDE)
deviceEnumerator.IMMDeviceEnumerator
hr=CoCreateInstance_(?uuidof_MMDeviceEnumerator, #Null, #CLSCTX_INPROC_SERVER, ?uuidof_IMMDeviceEnumerator,@deviceEnumerator);#CLSCTX_ALL
defaultDevice.IMMDevice
hr = deviceEnumerator\GetDefaultAudioEndpoint(#eRender, #eConsole, @defaultDevice);
deviceEnumerator\Release()
;endpointVolume.IAudioEndpointVolume
hr = defaultDevice\Activate(?uuidof_IAudioEndpointVolume, #CLSCTX_INPROC_SERVER, #Null, *endpointVolume);
defaultDevice\release()
ProcedureReturn *endpointvolume
EndProcedure
;currentVolume.f
;hr=endpointVolume\GetMasterVolumeLevel(@currentVolume)
;Debug hr
;Debug StrF(currentVolume)
;hr=endpointVolume\getVolumeRange(@min.f,@max.f,@inc.f)
;Debug StrF(min)+" "+StrF(max)+" "+StrF(inc)+" "+StrF((max - min) / inc)
;endpointVolume\SetMasterVolumeLevel(0)
;endpointVolume\GetMute(@mute)
;Debug mute
;endpointvolume\setmute(1,#Null)
;endpointVolume\GetMute(@mute)
;Debug mute
;Delay(1000)
;endpointvolume\setmute(0,#Null)
Procedure FreeEndPointVolume(*endpointvolume.IAudioEndpointVolume)
*endpointvolume\release()
CoUninitialize_()
EndProcedure
DataSection
uuidof_IAudioEndpointVolume:
Data.l $5CDF2C82
Data.w $841E,$4546
Data.b $97,$22,$0C,$F7,$40,$78,$22,$9A
uuidof_MMDeviceEnumerator:
Data.l $BCDE0395
Data.w $E52F,$467C
Data.b $8E,$3D,$C4,$57,$92,$91,$69,$2E
uuidof_IMMDeviceEnumerator:
Data.l $A95664D2
Data.w $9614
Data.w $4F35
Data.b $A7,$46,$DE,$8D,$B6,$36,$17,$E6
EndDataSection
Code: Alles auswählen
Case #action_VolUp,#action_VolDown;{ Leiser/lauter
Volume.IAudioEndpointVolume
getendpointvolume(@volume)
volume\GetMasterVolumeLevelScalar(@volf.f)
If action=#action_voldown
volf-#debugVolStep
If volf<0 : volf=0 : EndIf
Else
volf+#debugVolStep
If volf>1 : volf=1 : EndIf
EndIf
showinfo("Volume "+Str(volf*100)+"%",volf*100)
volume\SetMasterVolumeLevelScalar(volf,#Null)
volume\setmute(0,#Null)
FreeEndPointVolume(volume)
;}
Case #action_VolMute;{ Mute
Volume.IAudioEndpointVolume
getendpointvolume(@volume)
mute.l
volume\GetMute(@Mute.l)
mute=1-Mute
volume\GetMasterVolumeLevelScalar(@volf.f)
vol=Int(volf*100)
showinfo("Volume "+StringField(Str(vol)+"%,(mute)",mute+1,","),(1-mute)*vol)
volume\setmute(mute,#Null)
FreeEndPointVolume(Volume)
;}