15 #include "resources.h"
18 #define VOLUME_MAX 500
19 #define VOLUME_TICKS 5
20 #define VOLUME_PAGE_SIZE 100
21 #define BALANCE_LEFT 0
22 #define BALANCE_CENTER 32
23 #define BALANCE_RIGHT 64
24 #define BALANCE_STEPS 64
25 #define BALANCE_TICKS 1
26 #define BALANCE_PAGE_SIZE 12
28 typedef enum _WINDOW_MODE
33 } WINDOW_MODE
, *PWINDOW_MODE
;
35 typedef struct _MIXER_WINDOW
39 struct _SND_MIXER
*Mixer
;
48 } MIXER_WINDOW
, *PMIXER_WINDOW
;
50 extern HINSTANCE hAppInstance
;
51 extern ATOM MainWindowClass
;
53 extern HANDLE hAppHeap
;
55 #define SZ_APP_CLASS TEXT("Volume Control")
57 ULONG
DbgPrint(PCH
, ...);
58 #define DPRINT DbgPrint("SNDVOL32: %s:%i: ", __FILE__, __LINE__); DbgPrint
65 typedef struct _SND_MIXER_CONNECTION
67 struct _SND_MIXER_CONNECTION
*Next
;
69 LPMIXERCONTROL Controls
;
71 } SND_MIXER_CONNECTION
, *PSND_MIXER_CONNECTION
;
74 typedef struct _SND_MIXER_DESTINATION
76 struct _SND_MIXER_DESTINATION
*Next
;
78 LPMIXERCONTROL Controls
;
80 PSND_MIXER_CONNECTION Connections
;
81 } SND_MIXER_DESTINATION
, *PSND_MIXER_DESTINATION
;
83 typedef struct _SND_MIXER
86 HWND hWndNotification
;
90 PSND_MIXER_DESTINATION Lines
;
91 } SND_MIXER
, *PSND_MIXER
;
93 typedef struct _PREFERENCES_CONTEXT
95 PMIXER_WINDOW MixerWindow
;
104 TCHAR DeviceName
[128];
108 } PREFERENCES_CONTEXT
, *PPREFERENCES_CONTEXT
;
110 typedef struct _SET_VOLUME_CONTEXT
112 WCHAR LineName
[MIXER_LONG_NAME_CHARS
];
116 } SET_VOLUME_CONTEXT
, *PSET_VOLUME_CONTEXT
;
118 /* NOTE: do NOT modify SNDVOL_REG_LINESTATE for binary compatibility with XP! */
119 typedef struct _SNDVOL_REG_LINESTATE
122 WCHAR LineName
[MIXER_LONG_NAME_CHARS
];
123 } SNDVOL_REG_LINESTATE
, *PSNDVOL_REG_LINESTATE
;
126 typedef BOOL (CALLBACK
*PFNSNDMIXENUMLINES
)(PSND_MIXER Mixer
, LPMIXERLINE Line
, UINT DisplayControls
, PVOID Context
);
127 typedef BOOL (CALLBACK
*PFNSNDMIXENUMCONNECTIONS
)(PSND_MIXER Mixer
, DWORD LineID
, LPMIXERLINE Line
, PVOID Context
);
128 typedef BOOL (CALLBACK
*PFNSNDMIXENUMPRODUCTS
)(PSND_MIXER Mixer
, UINT Id
, LPCTSTR ProductName
, PVOID Context
);
130 PSND_MIXER
SndMixerCreate(HWND hWndNotification
, UINT MixerId
);
131 VOID
SndMixerDestroy(PSND_MIXER Mixer
);
132 VOID
SndMixerClose(PSND_MIXER Mixer
);
133 BOOL
SndMixerSelect(PSND_MIXER Mixer
, UINT MixerId
);
134 UINT
SndMixerGetSelection(PSND_MIXER Mixer
);
135 INT
SndMixerSetVolumeControlDetails(PSND_MIXER Mixer
, DWORD dwControlID
, DWORD cChannels
, DWORD cbDetails
, LPVOID paDetails
);
136 INT
SndMixerGetVolumeControlDetails(PSND_MIXER Mixer
, DWORD dwControlID
, DWORD cChannels
, DWORD cbDetails
, LPVOID paDetails
);
137 INT
SndMixerGetProductName(PSND_MIXER Mixer
, LPTSTR lpBuffer
, UINT uSize
);
138 INT
SndMixerGetLineName(PSND_MIXER Mixer
, DWORD LineID
, LPTSTR lpBuffer
, UINT uSize
, BOOL LongName
);
139 BOOL
SndMixerEnumProducts(PSND_MIXER Mixer
, PFNSNDMIXENUMPRODUCTS EnumProc
, PVOID Context
);
140 INT
SndMixerGetDestinationCount(PSND_MIXER Mixer
);
141 BOOL
SndMixerEnumLines(PSND_MIXER Mixer
, PFNSNDMIXENUMLINES EnumProc
, PVOID Context
);
142 BOOL
SndMixerEnumConnections(PSND_MIXER Mixer
, DWORD LineID
, PFNSNDMIXENUMCONNECTIONS EnumProc
, PVOID Context
);
143 BOOL
SndMixerIsDisplayControl(PSND_MIXER Mixer
, LPMIXERCONTROL Control
);
144 BOOL
SndMixerQueryControls(PSND_MIXER Mixer
, PUINT DisplayControls
, LPMIXERLINE LineInfo
, LPMIXERCONTROL
*Controls
);
149 VOID
LoadDialogCtrls(PPREFERENCES_CONTEXT PrefContext
);
150 VOID
UpdateDialogLineSliderControl(PPREFERENCES_CONTEXT PrefContext
, LPMIXERLINE Line
, DWORD DialogID
, DWORD Position
);
151 VOID
UpdateDialogLineSwitchControl(PPREFERENCES_CONTEXT PrefContext
, LPMIXERLINE Line
, LONG fValue
);
157 extern HKEY hAppSettingsKey
;
163 CloseAppConfig(VOID
);
166 AllocAndLoadString(OUT LPWSTR
*lpTarget
,
171 LoadAndFormatString(IN HINSTANCE hInstance
,
173 OUT LPWSTR
*lpTarget
,
177 ReadLineConfig(IN LPTSTR szDeviceName
,
178 IN LPTSTR szLineName
,
179 IN LPTSTR szControlName
,
183 WriteLineConfig(IN LPTSTR szDeviceName
,
184 IN LPTSTR szLineName
,
185 IN PSNDVOL_REG_LINESTATE LineState
,
198 #endif /* __SNDVOL32_H */