ReactOS
0.4.17-dev-769-g1500a35
mediabtns.h
Go to the documentation of this file.
1
/*
2
* PROJECT: ReactOS Explorer
3
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4
* PURPOSE: Backend class for media buttons (header)
5
* COPYRIGHT: Copyright 2026 Vitaly Orekhov <vkvo2000@vivaldi.net>
6
*/
7
8
#include <mmddk.h>
9
10
typedef
MMRESULT
(
WINAPI
*
pmxControlDetails
)(HMIXEROBJ hmxobj,
LPMIXERCONTROLDETAILS
pmxcd,
DWORD
fdwDetails);
11
typedef
MMRESULT
(
WINAPI
*
pmxGetID
)(HMIXEROBJ hmxobj,
UINT
* puMxId,
DWORD
fdwId);
12
typedef
MMRESULT
(
WINAPI
*
pmxLine
)(HMIXEROBJ hmxobj,
LPMIXERLINEW
pmxcd,
DWORD
fdwDetails);
13
typedef
MMRESULT
(
WINAPI
*
pmxLineControls
)(HMIXEROBJ hmxobj,
LPMIXERLINECONTROLSW
pmxcd,
DWORD
fdwDetails);
14
typedef
MMRESULT
(
WINAPI
*
pmxOpen
)(
LPHMIXER
phmx,
UINT
uMxId,
DWORD_PTR
dwCallback,
DWORD_PTR
dwInstance,
DWORD
fdwOpen);
15
typedef
MMRESULT
(
WINAPI
*
pmxClose
)(HMIXER hmx);
16
typedef
MMRESULT
(
WINAPI
*
pwoGetErrText
)(
MMRESULT
mmrError,
LPWSTR
pszText,
UINT
cchText
);
17
typedef
MMRESULT
(
WINAPI
*
pwoGetNumDevs
)(
VOID
);
18
typedef
MMRESULT
(
WINAPI
*
pwoMessage
)(HWAVEOUT hwo,
UINT
uMsg,
DWORD_PTR
dw1,
DWORD_PTR
dw2);
19
#define WINMM_PROC(func, type) ((func) = (type)GetProcAddress(hWinMM, #func))
20
21
/* Media volume buttons are synchronized against sndvol32 meters */
22
#define VOLUME_STEPS_COUNT 25
23
24
class
CMultimediaBackend
25
{
26
public
:
27
CMultimediaBackend
();
28
~CMultimediaBackend
();
29
CMultimediaBackend
(
CMultimediaBackend
&) =
delete
;
30
CMultimediaBackend
(
CMultimediaBackend
&&) =
delete
;
31
CMultimediaBackend
&
operator=
(
CMultimediaBackend
&) =
delete
;
32
CMultimediaBackend
&
operator=
(
CMultimediaBackend
&&) =
delete
;
33
34
void
Initialize
();
35
bool
Mute
();
36
bool
AdjustVolume
(
_In_
UINT
direction
,
_In_
HANDLE
hProcessHeap
);
37
38
private
:
39
void
CalculateSteps
(
_Inout_
PMIXERCONTROLDETAILS_UNSIGNED
pmxcdVolume);
40
void
LogError
(
_In_
const
char
* pszFunctionName,
_In_
const
char
* pszMessage,
_In_
MMRESULT
mmres);
41
MMRESULT
GetCurrentVolume
(
_Inout_
PMIXERCONTROLDETAILS
pmxcd);
42
43
pmxControlDetails
mixerSetControlDetails
;
44
pmxControlDetails
mixerGetControlDetailsW
;
45
pmxGetID
mixerGetID
;
46
pmxLine
mixerGetLineInfoW
;
47
pmxLineControls
mixerGetLineControlsW
;
48
pmxOpen
mixerOpen
;
49
pmxClose
mixerClose
;
50
pwoGetErrText
waveOutGetErrorTextW
;
51
pwoGetNumDevs
waveOutGetNumDevs
;
52
pwoMessage
waveOutMessage
;
53
54
HMODULE
m_hWinMM
;
55
HMIXER
m_hMixer
=
NULL
;
56
DWORD
m_dwMasterMuteControlID
;
57
DWORD
m_dwMasterVolumeID
;
58
DWORD
m_dwMasterChannels
;
59
struct
60
{
61
DWORD
dwMinimum
;
62
DWORD
dwMaximum
;
63
}
m_dwMasterRanges
;
64
PDWORD
m_pdwChannelSteps
=
NULL
;
65
};
VOID
#define VOID
Definition:
acefi.h:82
CMultimediaBackend
Definition:
mediabtns.h:25
CMultimediaBackend::m_hWinMM
HMODULE m_hWinMM
Definition:
mediabtns.h:54
CMultimediaBackend::CMultimediaBackend
CMultimediaBackend(CMultimediaBackend &)=delete
CMultimediaBackend::AdjustVolume
bool AdjustVolume(_In_ UINT direction, _In_ HANDLE hProcessHeap)
Definition:
mediabtns.cpp:184
CMultimediaBackend::mixerGetControlDetailsW
pmxControlDetails mixerGetControlDetailsW
Definition:
mediabtns.h:44
CMultimediaBackend::mixerGetLineControlsW
pmxLineControls mixerGetLineControlsW
Definition:
mediabtns.h:47
CMultimediaBackend::mixerSetControlDetails
pmxControlDetails mixerSetControlDetails
Definition:
mediabtns.h:43
CMultimediaBackend::m_dwMasterChannels
DWORD m_dwMasterChannels
Definition:
mediabtns.h:58
CMultimediaBackend::waveOutGetNumDevs
pwoGetNumDevs waveOutGetNumDevs
Definition:
mediabtns.h:51
CMultimediaBackend::m_dwMasterVolumeID
DWORD m_dwMasterVolumeID
Definition:
mediabtns.h:57
CMultimediaBackend::waveOutMessage
pwoMessage waveOutMessage
Definition:
mediabtns.h:52
CMultimediaBackend::dwMinimum
DWORD dwMinimum
Definition:
mediabtns.h:61
CMultimediaBackend::m_dwMasterMuteControlID
DWORD m_dwMasterMuteControlID
Definition:
mediabtns.h:56
CMultimediaBackend::mixerGetLineInfoW
pmxLine mixerGetLineInfoW
Definition:
mediabtns.h:46
CMultimediaBackend::m_pdwChannelSteps
PDWORD m_pdwChannelSteps
Definition:
mediabtns.h:64
CMultimediaBackend::GetCurrentVolume
MMRESULT GetCurrentVolume(_Inout_ PMIXERCONTROLDETAILS pmxcd)
Definition:
mediabtns.cpp:334
CMultimediaBackend::mixerGetID
pmxGetID mixerGetID
Definition:
mediabtns.h:45
CMultimediaBackend::operator=
CMultimediaBackend & operator=(CMultimediaBackend &&)=delete
CMultimediaBackend::m_dwMasterRanges
struct CMultimediaBackend::@96 m_dwMasterRanges
CMultimediaBackend::waveOutGetErrorTextW
pwoGetErrText waveOutGetErrorTextW
Definition:
mediabtns.h:50
CMultimediaBackend::Initialize
void Initialize()
Definition:
mediabtns.cpp:52
CMultimediaBackend::CMultimediaBackend
CMultimediaBackend()
Definition:
mediabtns.cpp:12
CMultimediaBackend::mixerOpen
pmxOpen mixerOpen
Definition:
mediabtns.h:48
CMultimediaBackend::CalculateSteps
void CalculateSteps(_Inout_ PMIXERCONTROLDETAILS_UNSIGNED pmxcdVolume)
Definition:
mediabtns.cpp:280
CMultimediaBackend::~CMultimediaBackend
~CMultimediaBackend()
Definition:
mediabtns.cpp:41
CMultimediaBackend::Mute
bool Mute()
Definition:
mediabtns.cpp:159
CMultimediaBackend::mixerClose
pmxClose mixerClose
Definition:
mediabtns.h:49
CMultimediaBackend::operator=
CMultimediaBackend & operator=(CMultimediaBackend &)=delete
CMultimediaBackend::m_hMixer
HMIXER m_hMixer
Definition:
mediabtns.h:55
CMultimediaBackend::dwMaximum
DWORD dwMaximum
Definition:
mediabtns.h:62
CMultimediaBackend::CMultimediaBackend
CMultimediaBackend(CMultimediaBackend &&)=delete
LogError
_In_ ULONG _In_ BOOLEAN LogError
Definition:
classpnp.h:1311
NULL
#define NULL
Definition:
types.h:112
hProcessHeap
HANDLE hProcessHeap
Definition:
explorer.cpp:25
DWORD
unsigned long DWORD
Definition:
ntddk_ex.h:95
UINT
unsigned int UINT
Definition:
sysinfo.c:13
void
Definition:
nsiface.idl:2307
pmxGetID
MMRESULT(WINAPI * pmxGetID)(HMIXEROBJ hmxobj, UINT *puMxId, DWORD fdwId)
Definition:
mediabtns.h:11
pmxLine
MMRESULT(WINAPI * pmxLine)(HMIXEROBJ hmxobj, LPMIXERLINEW pmxcd, DWORD fdwDetails)
Definition:
mediabtns.h:12
pmxLineControls
MMRESULT(WINAPI * pmxLineControls)(HMIXEROBJ hmxobj, LPMIXERLINECONTROLSW pmxcd, DWORD fdwDetails)
Definition:
mediabtns.h:13
pwoMessage
MMRESULT(WINAPI * pwoMessage)(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
Definition:
mediabtns.h:18
pwoGetErrText
MMRESULT(WINAPI * pwoGetErrText)(MMRESULT mmrError, LPWSTR pszText, UINT cchText)
Definition:
mediabtns.h:16
pmxClose
MMRESULT(WINAPI * pmxClose)(HMIXER hmx)
Definition:
mediabtns.h:15
pmxOpen
MMRESULT(WINAPI * pmxOpen)(LPHMIXER phmx, UINT uMxId, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
Definition:
mediabtns.h:14
pwoGetNumDevs
MMRESULT(WINAPI * pwoGetNumDevs)(VOID)
Definition:
mediabtns.h:17
pmxControlDetails
MMRESULT(WINAPI * pmxControlDetails)(HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails)
Definition:
mediabtns.h:10
MMRESULT
UINT MMRESULT
Definition:
mmsystem.h:964
LPHMIXER
HMIXER * LPHMIXER
Definition:
mmsystem.h:1213
direction
direction
Definition:
netio.c:882
_Inout_
#define _Inout_
Definition:
no_sal2.h:162
_In_
#define _In_
Definition:
no_sal2.h:158
PDWORD
DWORD * PDWORD
Definition:
pedump.c:68
tMIXERCONTROLDETAILS_UNSIGNED
Definition:
mmsystem.h:1387
tMIXERCONTROLDETAILS
Definition:
mmsystem.h:1355
tagMIXERLINECONTROLSW
Definition:
mmsystem.h:1343
tagMIXERLINEW
Definition:
mmsystem.h:1256
DWORD_PTR
uint32_t DWORD_PTR
Definition:
typedefs.h:65
LPWSTR
uint16_t * LPWSTR
Definition:
typedefs.h:56
WINAPI
#define WINAPI
Definition:
msvc.h:6
cchText
_In_ int cchText
Definition:
winuser.h:4619
base
shell
explorer
mediabtns.h
Generated on Sat Sep 5 2026 06:03:24 for ReactOS by
1.9.6