15 #include "resources.h"
17 #define VOLUME_STEPS 500
18 #define VOLUME_TICKS 5
19 #define VOLUME_PAGE_SIZE 100
20 #define BALANCE_STEPS 64
21 #define BALANCE_TICKS 1
22 #define BALANCE_PAGE_SIZE 12
24 typedef enum _WINDOW_MODE
29 } WINDOW_MODE
, *PWINDOW_MODE
;
31 typedef struct _MIXER_WINDOW
35 struct _SND_MIXER
*Mixer
;
44 } MIXER_WINDOW
, *PMIXER_WINDOW
;
46 extern HINSTANCE hAppInstance
;
47 extern ATOM MainWindowClass
;
49 extern HANDLE hAppHeap
;
51 #define SZ_APP_CLASS TEXT("Volume Control")
53 ULONG
DbgPrint(PCH
, ...);
54 #define DPRINT DbgPrint("SNDVOL32: %s:%i: ", __FILE__, __LINE__); DbgPrint
61 typedef struct _SND_MIXER_CONNECTION
63 struct _SND_MIXER_CONNECTION
*Next
;
65 LPMIXERCONTROL Controls
;
67 } SND_MIXER_CONNECTION
, *PSND_MIXER_CONNECTION
;
70 typedef struct _SND_MIXER_DESTINATION
72 struct _SND_MIXER_DESTINATION
*Next
;
74 LPMIXERCONTROL Controls
;
76 PSND_MIXER_CONNECTION Connections
;
77 } SND_MIXER_DESTINATION
, *PSND_MIXER_DESTINATION
;
79 typedef struct _SND_MIXER
82 HWND hWndNotification
;
86 PSND_MIXER_DESTINATION Lines
;
87 } SND_MIXER
, *PSND_MIXER
;
89 typedef struct _PREFERENCES_CONTEXT
91 PMIXER_WINDOW MixerWindow
;
100 TCHAR DeviceName
[128];
104 } PREFERENCES_CONTEXT
, *PPREFERENCES_CONTEXT
;
108 WCHAR LineName
[MIXER_LONG_NAME_CHARS
];
113 }SET_VOLUME_CONTEXT
, *PSET_VOLUME_CONTEXT
;
115 /* NOTE: do NOT modify SNDVOL_REG_LINESTATE for binary compatibility with XP! */
116 typedef struct _SNDVOL_REG_LINESTATE
119 WCHAR LineName
[MIXER_LONG_NAME_CHARS
];
120 } SNDVOL_REG_LINESTATE
, *PSNDVOL_REG_LINESTATE
;
123 typedef BOOL (CALLBACK
*PFNSNDMIXENUMLINES
)(PSND_MIXER Mixer
, LPMIXERLINE Line
, UINT DisplayControls
, PVOID Context
);
124 typedef BOOL (CALLBACK
*PFNSNDMIXENUMCONNECTIONS
)(PSND_MIXER Mixer
, DWORD LineID
, LPMIXERLINE Line
, PVOID Context
);
125 typedef BOOL (CALLBACK
*PFNSNDMIXENUMPRODUCTS
)(PSND_MIXER Mixer
, UINT Id
, LPCTSTR ProductName
, PVOID Context
);
127 PSND_MIXER
SndMixerCreate(HWND hWndNotification
, UINT MixerId
);
128 VOID
SndMixerDestroy(PSND_MIXER Mixer
);
129 VOID
SndMixerClose(PSND_MIXER Mixer
);
130 BOOL
SndMixerSelect(PSND_MIXER Mixer
, UINT MixerId
);
131 UINT
SndMixerGetSelection(PSND_MIXER Mixer
);
132 INT
SndMixerSetVolumeControlDetails(PSND_MIXER Mixer
, DWORD dwControlID
, DWORD cbDetails
, LPVOID paDetails
);
133 INT
SndMixerGetVolumeControlDetails(PSND_MIXER Mixer
, DWORD dwControlID
, DWORD cbDetails
, LPVOID paDetails
);
134 INT
SndMixerGetProductName(PSND_MIXER Mixer
, LPTSTR lpBuffer
, UINT uSize
);
135 INT
SndMixerGetLineName(PSND_MIXER Mixer
, DWORD LineID
, LPTSTR lpBuffer
, UINT uSize
, BOOL LongName
);
136 BOOL
SndMixerEnumProducts(PSND_MIXER Mixer
, PFNSNDMIXENUMPRODUCTS EnumProc
, PVOID Context
);
137 INT
SndMixerGetDestinationCount(PSND_MIXER Mixer
);
138 BOOL
SndMixerEnumLines(PSND_MIXER Mixer
, PFNSNDMIXENUMLINES EnumProc
, PVOID Context
);
139 BOOL
SndMixerEnumConnections(PSND_MIXER Mixer
, DWORD LineID
, PFNSNDMIXENUMCONNECTIONS EnumProc
, PVOID Context
);
140 BOOL
SndMixerIsDisplayControl(PSND_MIXER Mixer
, LPMIXERCONTROL Control
);
141 BOOL
SndMixerQueryControls(PSND_MIXER Mixer
, PUINT DisplayControls
, LPMIXERLINE LineInfo
, LPMIXERCONTROL
*Controls
);
146 VOID
LoadDialogCtrls(PPREFERENCES_CONTEXT PrefContext
);
147 VOID
UpdateDialogLineSliderControl(PPREFERENCES_CONTEXT PrefContext
, LPMIXERLINE Line
, DWORD dwControlID
, DWORD DialogID
, DWORD Position
);
148 VOID
UpdateDialogLineSwitchControl(PPREFERENCES_CONTEXT PrefContext
, LPMIXERLINE Line
, LONG fValue
);
154 extern HKEY hAppSettingsKey
;
160 CloseAppConfig(VOID
);
163 AllocAndLoadString(OUT LPWSTR
*lpTarget
,
168 LoadAndFormatString(IN HINSTANCE hInstance
,
170 OUT LPWSTR
*lpTarget
,
174 ReadLineConfig(IN LPTSTR szDeviceName
,
175 IN LPTSTR szLineName
,
176 IN LPTSTR szControlName
,
180 WriteLineConfig(IN LPTSTR szDeviceName
,
181 IN LPTSTR szLineName
,
182 IN PSNDVOL_REG_LINESTATE LineState
,
195 #endif /* __SNDVOL32_H */