37 #define GetDialogData(hwndDlg, type) \ 38 ( P##type )GetWindowLongPtr((hwndDlg), DWLP_USER) 39 #define GetWindowData(hwnd, type) \ 40 ( P##type )GetWindowLongPtr((hwnd), GWL_USERDATA) 99 switch (
Line->dwComponentType)
112 goto AddToOthersLines;
127 goto AddToOthersLines;
179 if (
Line->cControls != 0)
185 lvi.iItem = PrefContext->
tmp++;
187 lvi.pszText =
Line->szName;
206 LineName[0] =
TEXT(
'\0');
233 INT OldID, MixerID = 0;
242 if (DeviceCbIndex !=
CB_ERR)
256 if (MixerID != OldID &&
312 (
Context->OtherLines != 0 && SelBox++ == 0) ?
322 LineID =
Context->SelectedLine;
327 if ((MixerID != OldID &&
Context->SelectedLine != (
DWORD)-1) ||
328 (
Context->SelectedLine != LineID && LineID != (
DWORD)-1))
330 Context->SelectedLine = LineID;
371 if (LineStates ==
NULL)
495 if (LineCbIndex !=
CB_ERR)
560 lvc.pszText =
TEXT(
"");
561 lvc.cx = rcClient.
right;
653 if (puDetails ==
NULL)
663 DWORD LineOffset, volumePosition, balancePosition;
664 DWORD volumeStep, balanceStep;
666 LineOffset =
Context->SliderPos;
671 if (
Line->cChannels == 1)
676 else if (
Line->cChannels == 2)
741 if (puDetails !=
NULL)
762 if (
Line->cControls == 0)
778 if (pVolumeDetails ==
NULL)
803 DWORD volumePosition, volumeStep, maxVolume,
i;
804 DWORD balancePosition, balanceStep;
809 for (
i = 0;
i <
Line->cChannels;
i++)
811 if (pVolumeDetails[
i].dwValue > maxVolume)
812 maxVolume = pVolumeDetails[
i].dwValue;
815 volumePosition = (maxVolume -
Control[
Index].Bounds.dwMinimum) / volumeStep;
817 if (
Line->cChannels == 1)
821 else if (
Line->cChannels == 2)
823 if (pVolumeDetails[0].dwValue == pVolumeDetails[1].dwValue)
827 else if (pVolumeDetails[0].dwValue ==
Control[
Index].Bounds.dwMinimum)
831 else if (pVolumeDetails[1].dwValue ==
Control[
Index].Bounds.dwMinimum)
839 if (pVolumeDetails[0].dwValue < pVolumeDetails[1].dwValue)
841 balancePosition = (pVolumeDetails[0].dwValue -
Control[
Index].Bounds.dwMinimum) / balanceStep;
844 else if (pVolumeDetails[1].dwValue < pVolumeDetails[0].dwValue)
846 balancePosition = (pVolumeDetails[1].dwValue -
Control[
Index].Bounds.dwMinimum) / balanceStep;
882 DWORD CtrlID, LineOffset;
916 sizeof(szProduct) /
sizeof(szProduct[0])) == -1)
919 szProduct[0] =
L'\0';
1046 if (AdvancedContext.
Line)
1052 (
LPARAM)&AdvancedContext);
1064 DPRINT(
"MM_MIXM_LINE_CHANGE\n");
1070 DPRINT(
"MM_MIXM_CONTROL_CHANGE\n");
1101 Context.SliderPos = LineOffset;
1120 if (LineOffset == 1 && MixerWindow->
Mixer->MixerId == 0)
1146 Context.SliderPos = LineOffset;
1165 if (LineOffset == 1 && MixerWindow->
Mixer->MixerId == 0)
1181 MixerWindow->hWnd =
hwnd;
1182 MixerWindow->Mixer =
SndMixerCreate(MixerWindow->hWnd, MixerWindow->MixerId);
1183 if (MixerWindow->Mixer !=
NULL)
1190 sizeof(szProduct) /
sizeof(szProduct[0])) == -1)
1193 szProduct[0] =
L'\0';
1234 if (MixerWindow->hStatusBar)
1245 DPRINT(
"Rebuilding mixer window controls failed!\n");
1247 MixerWindow->Mixer =
NULL;
1258 if (MixerWindow !=
NULL)
1264 if (MixerWindow->
hFont)
1332 if (MixerWindow ==
NULL)
1337 MixerWindow->
Mode = WindowMode;
1338 MixerWindow->
MixerId = MixerId;
1536 DPRINT(
"Unable to open the Volume Control registry key!\n");
#define IDC_LINE_SLIDER_VERT
BOOL WINAPI CheckDlgButton(_In_ HWND, _In_ int, _In_ UINT)
#define WM_SYSCOLORCHANGE
BOOL ReadLineConfig(IN LPTSTR szDeviceName, IN LPTSTR szLineName, IN LPTSTR szControlName, OUT DWORD *Flags)
BOOL WINAPI TranslateMessage(_In_ const MSG *)
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
VOID CloseAppConfig(VOID)
INT SndMixerGetLineName(PSND_MIXER Mixer, DWORD LineID, LPTSTR lpBuffer, UINT uSize, BOOL LongName)
static BOOL RebuildMixerWindowControls(PPREFERENCES_CONTEXT PrefContext)
#define UNREFERENCED_PARAMETER(P)
BOOL LoadXYCoordWnd(IN PPREFERENCES_CONTEXT PrefContext)
enum _WINDOW_MODE WINDOW_MODE
PREFERENCES_CONTEXT Preferences
struct _PREFERENCES_CONTEXT * PPREFERENCES_CONTEXT
#define ListView_GetItemText(hwndLV, i, iSubItem_, pszText_, cchTextMax_)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
static BOOL RegisterApplicationClasses(VOID)
BOOL SndMixerEnumConnections(PSND_MIXER Mixer, DWORD LineID, PFNSNDMIXENUMCONNECTIONS EnumProc, PVOID Context)
struct _SET_VOLUME_CONTEXT * PSET_VOLUME_CONTEXT
DWORD WINAPI GetLastError(VOID)
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
VOID UpdateDialogLineSliderControl(PPREFERENCES_CONTEXT PrefContext, LPMIXERLINE Line, DWORD dwDialogID, DWORD Position)
static BOOL HandleCommandLine(LPTSTR cmdline, DWORD dwStyle, PWINDOW_MODE pMode, PUINT pMixerId)
static BOOL CALLBACK SetVolumeCallback(PSND_MIXER Mixer, DWORD LineID, LPMIXERLINE Line, PVOID Ctx)
static VOID DeleteMixerWindowControls(PMIXER_WINDOW MixerWindow)
VOID LoadDialogCtrls(PPREFERENCES_CONTEXT PrefContext)
#define SendDlgItemMessage
INT_PTR CALLBACK TrayDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
static INT AllocAndLoadString(OUT LPTSTR *lpTarget, IN HINSTANCE hInst, IN UINT uID)
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpszCmdLine, int nCmdShow)
CREATESTRUCTA * LPCREATESTRUCT
BOOL WINAPI DestroyWindow(_In_ HWND)
struct tagINITCOMMONCONTROLSEX INITCOMMONCONTROLSEX
#define IDM_ADVANCED_CONTROLS
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
struct _PREFERENCES_FILL_DEVICES * PPREFERENCES_FILL_DEVICES
int WINAPI GetDlgCtrlID(_In_ HWND)
INT SndMixerSetVolumeControlDetails(PSND_MIXER Mixer, DWORD dwControlID, DWORD cChannels, DWORD cbDetails, LPVOID paDetails)
BOOL SndMixerQueryControls(PSND_MIXER Mixer, PUINT DisplayControls, LPMIXERLINE LineInfo, LPMIXERCONTROL *Controls)
VOID UpdateDialogLineSwitchControl(PPREFERENCES_CONTEXT PrefContext, LPMIXERLINE Line, LONG fValue)
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define WS_EX_CONTROLPARENT
BOOL SndMixerEnumLines(PSND_MIXER Mixer, PFNSNDMIXENUMLINES EnumProc, PVOID Context)
#define CreateStatusWindow
static BOOL CALLBACK PrefDlgAddConnection(PSND_MIXER Mixer, DWORD LineID, LPMIXERLINE Line, PVOID Context)
static LRESULT CALLBACK MainWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
struct _SND_MIXER * Mixer
_In_ WDF_WMI_PROVIDER_CONTROL Control
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
#define ListView_GetItemCount(hwnd)
static HWND CreateApplicationWindow(WINDOW_MODE WindowMode, UINT MixerId)
PMIXER_WINDOW MixerWindow
BOOL bShowExtendedControls
struct _PREFERENCES_FILL_DEVICES PREFERENCES_FILL_DEVICES
#define SND_ALIAS_SYSTEMDEFAULT
static BOOL CALLBACK FillDeviceComboBox(PSND_MIXER Mixer, UINT Id, LPCTSTR ProductName, PVOID Context)
BOOL WriteLineConfig(IN LPTSTR szDeviceName, IN LPTSTR szLineName, IN PSNDVOL_REG_LINESTATE LineState, IN DWORD cbSize)
#define IDC_LINE_ADVANCED
_Must_inspect_result_ _In_ ULONG Flags
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
_In_ WDFCOLLECTION _In_ ULONG Index
static BOOL CALLBACK PrefDlgAddLine(PSND_MIXER Mixer, LPMIXERLINE Line, UINT DisplayControls, PVOID Context)
INT SndMixerGetVolumeControlDetails(PSND_MIXER Mixer, DWORD dwControlID, DWORD cChannels, DWORD cbDetails, LPVOID paDetails)
#define GetWindowData(hwnd, type)
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
static VOID WriteLineSettings(PPREFERENCES_CONTEXT Context, HWND hwndDlg)
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define ListView_SetExtendedListViewStyle(hwndLV, dw)
UINT SndMixerGetSelection(PSND_MIXER Mixer)
struct _MIXER_WINDOW * PMIXER_WINDOW
#define MB_ICONINFORMATION
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define LVS_EX_CHECKBOXES
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
#define GetDialogData(hwndDlg, type)
static VOID UpdatePrefDlgControls(PPREFERENCES_CONTEXT Context, DWORD LineID)
BOOL SndMixerEnumProducts(PSND_MIXER Mixer, PFNSNDMIXENUMPRODUCTS EnumProc, PVOID Context)
#define MIXER_LONG_NAME_CHARS
PPREFERENCES_CONTEXT PrefContext
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
#define MIXERCONTROL_CONTROLTYPE_VOLUME
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define MIXERCONTROL_CONTROLTYPE_MUTE
enum _WINDOW_MODE * PWINDOW_MODE
#define ListView_GetCheckState(hwndLV, i)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define IDC_LINE_SLIDER_HORZ
VOID SndMixerDestroy(PSND_MIXER Mixer)
static INT_PTR CALLBACK AdvancedDlgProc(HWND hDlg, UINT Message, WPARAM wParam, LPARAM lParam)
#define MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
static BOOL CALLBACK MixerControlChangeCallback(PSND_MIXER Mixer, DWORD LineID, LPMIXERLINE Line, PVOID Context)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
UINT WINAPI mixerGetNumDevs(void)
#define IDS_NOMIXERDEVICES
WCHAR LineName[MIXER_LONG_NAME_CHARS]
static INT_PTR CALLBACK DlgPreferencesProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
#define MIXERLINE_COMPONENTTYPE_DST_WAVEIN
BOOL SaveXYCoordWnd(IN HWND hWnd, IN PPREFERENCES_CONTEXT PrefContext)
#define ListView_SetCheckState(hwndLV, i, fCheck)
BOOL SndMixerSelect(PSND_MIXER Mixer, UINT MixerId)
struct tagContext Context
INT SndMixerGetProductName(PSND_MIXER Mixer, LPTSTR lpBuffer, UINT uSize)
#define ICC_STANDARD_CLASSES
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define MM_MIXM_LINE_CHANGE
PSND_MIXER SndMixerCreate(HWND hWndNotification, UINT MixerId)
static VOID UnregisterApplicationClasses(VOID)
DWORD GetStyleValue(VOID)
HMENU WINAPI GetMenu(_In_ HWND)
#define HeapFree(x, y, z)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define ListView_DeleteAllItems(hwnd)
PMIXER_WINDOW MixerWindow
LPMIXERLINE SndMixerGetLineByName(PSND_MIXER Mixer, DWORD LineID, LPWSTR LineName)
#define MM_MIXM_CONTROL_CHANGE