3 * PROJECT: ReactOS Multimedia Control Panel
4 * FILE: lib/cpl/mmsys/mmsys.c
5 * PURPOSE: ReactOS Multimedia Control Panel
6 * PROGRAMMER: Thomas Weidenmueller <w3seek@reactos.com>
7 * Johannes Anderwald <janderwald@reactos.com>
8 * Dmitry Chapyshev <dmitry@reactos.org>
21 InitAudioDlg(HWND hwnd
)
23 WAVEOUTCAPSW waveOutputPaps
;
24 WAVEINCAPS waveInputPaps
;
25 MIDIOUTCAPS midiOutCaps
;
26 TCHAR szNoDevices
[256];
32 LoadString(hApplet
, IDS_NO_DEVICES
, szNoDevices
, sizeof(szNoDevices
) / sizeof(TCHAR
));
34 // Init sound playback devices list
35 hCB
= GetDlgItem(hwnd
, IDC_DEVICE_PLAY_LIST
);
37 DevsNum
= waveOutGetNumDevs();
40 Res
= SendMessage(hCB
, CB_ADDSTRING
, 0, (LPARAM
)szNoDevices
);
41 SendMessage(hCB
, CB_SETCURSEL
, (WPARAM
) Res
, 0);
45 WCHAR DefaultDevice
[MAX_PATH
] = {0};
47 DWORD dwSize
= sizeof(DefaultDevice
);
48 UINT DefaultIndex
= 0;
50 if (RegOpenKeyExW(HKEY_CURRENT_USER
, L
"Software\\Microsoft\\Multimedia\\Sound Mapper", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
52 RegQueryValueExW(hKey
, L
"Playback", NULL
, NULL
, (LPBYTE
)DefaultDevice
, &dwSize
);
53 DefaultDevice
[MAX_PATH
-1] = L
'\0';
57 for (uIndex
= 0; uIndex
< DevsNum
; uIndex
++)
59 if (waveOutGetDevCapsW(uIndex
, &waveOutputPaps
, sizeof(waveOutputPaps
)))
62 Res
= SendMessageW(hCB
, CB_ADDSTRING
, 0, (LPARAM
) waveOutputPaps
.szPname
);
66 SendMessage(hCB
, CB_SETITEMDATA
, Res
, (LPARAM
) uIndex
);
67 if (!wcsicmp(waveOutputPaps
.szPname
, DefaultDevice
))
71 SendMessage(hCB
, CB_SETCURSEL
, (WPARAM
) DefaultIndex
, 0);
74 // Init sound recording devices list
75 hCB
= GetDlgItem(hwnd
, IDC_DEVICE_REC_LIST
);
77 DevsNum
= waveInGetNumDevs();
80 Res
= SendMessage(hCB
, CB_ADDSTRING
, 0, (LPARAM
)szNoDevices
);
81 SendMessage(hCB
, CB_SETCURSEL
, (WPARAM
) Res
, 0);
85 WCHAR DefaultDevice
[MAX_PATH
] = {0};
87 DWORD dwSize
= sizeof(DefaultDevice
);
88 UINT DefaultIndex
= 0;
90 if (RegOpenKeyExW(HKEY_CURRENT_USER
, L
"Software\\Microsoft\\Multimedia\\Sound Mapper", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
92 RegQueryValueExW(hKey
, L
"Record", NULL
, NULL
, (LPBYTE
)DefaultDevice
, &dwSize
);
93 DefaultDevice
[MAX_PATH
-1] = L
'\0';
98 for (uIndex
= 0; uIndex
< DevsNum
; uIndex
++)
100 if (waveInGetDevCaps(uIndex
, &waveInputPaps
, sizeof(waveInputPaps
)))
103 Res
= SendMessage(hCB
, CB_ADDSTRING
, 0, (LPARAM
) waveInputPaps
.szPname
);
107 SendMessage(hCB
, CB_SETITEMDATA
, Res
, (LPARAM
) uIndex
);
108 if (!wcsicmp(waveInputPaps
.szPname
, DefaultDevice
))
112 SendMessage(hCB
, CB_SETCURSEL
, (WPARAM
) DefaultIndex
, 0);
115 // Init MIDI devices list
116 hCB
= GetDlgItem(hwnd
, IDC_DEVICE_MIDI_LIST
);
118 DevsNum
= midiOutGetNumDevs();
121 Res
= SendMessage(hCB
, CB_ADDSTRING
, 0, (LPARAM
)szNoDevices
);
122 SendMessage(hCB
, CB_SETCURSEL
, (WPARAM
) Res
, 0);
126 for (uIndex
= 0; uIndex
< DevsNum
; uIndex
++)
128 if (midiOutGetDevCaps(uIndex
, &midiOutCaps
, sizeof(midiOutCaps
)))
131 Res
= SendMessage(hCB
, CB_ADDSTRING
, 0, (LPARAM
) midiOutCaps
.szPname
);
135 SendMessage(hCB
, CB_SETITEMDATA
, Res
, (LPARAM
) uIndex
);
136 // TODO: Getting default device
137 SendMessage(hCB
, CB_SETCURSEL
, (WPARAM
) Res
, 0);
144 GetDevNum(HWND hControl
, DWORD Id
)
149 iCurSel
= SendMessage(hControl
, CB_GETCURSEL
, 0, 0);
151 if (iCurSel
== CB_ERR
)
154 DevNum
= (UINT
) SendMessage(hControl
, CB_GETITEMDATA
, iCurSel
, 0);
155 if (DevNum
== (UINT
) CB_ERR
)
158 if (mixerGetID((HMIXEROBJ
)IntToPtr(DevNum
), &DevNum
, Id
) != MMSYSERR_NOERROR
)
164 /* Audio property page dialog callback */
166 AudioDlgProc(HWND hwndDlg
,
171 UNREFERENCED_PARAMETER(lParam
);
172 UNREFERENCED_PARAMETER(wParam
);
173 UNREFERENCED_PARAMETER(hwndDlg
);
179 UINT NumWavOut
= waveOutGetNumDevs();
181 InitAudioDlg(hwndDlg
);
185 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEVICE_PLAY_LIST
), FALSE
);
186 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEVICE_REC_LIST
), FALSE
);
187 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEVICE_MIDI_LIST
), FALSE
);
188 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFAULT_DEV_CHECKBOX
), FALSE
);
189 EnableWindow(GetDlgItem(hwndDlg
, IDC_VOLUME1_BTN
), FALSE
);
190 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADV2_BTN
), FALSE
);
191 EnableWindow(GetDlgItem(hwndDlg
, IDC_VOLUME2_BTN
), FALSE
);
192 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADV1_BTN
), FALSE
);
193 EnableWindow(GetDlgItem(hwndDlg
, IDC_VOLUME3_BTN
), FALSE
);
194 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADV3_BTN
), FALSE
);
202 PROCESS_INFORMATION pi
;
203 WCHAR szPath
[MAX_PATH
];
205 switch(LOWORD(wParam
))
207 case IDC_VOLUME1_BTN
:
209 wsprintf(szPath
, L
"sndvol32.exe -d %d",
210 GetDevNum(GetDlgItem(hwndDlg
, IDC_DEVICE_PLAY_LIST
), MIXER_OBJECTF_WAVEOUT
));
212 ZeroMemory(&si
, sizeof(si
));
214 si
.wShowWindow
= SW_SHOW
;
216 CreateProcess(NULL
, szPath
, NULL
, NULL
, FALSE
, 0, NULL
, NULL
, &si
, &pi
);
226 case IDC_VOLUME2_BTN
:
228 wsprintf(szPath
, L
"sndvol32.exe -r -d %d",
229 GetDevNum(GetDlgItem(hwndDlg
, IDC_DEVICE_REC_LIST
), MIXER_OBJECTF_WAVEIN
));
231 ZeroMemory(&si
, sizeof(si
));
233 si
.wShowWindow
= SW_SHOW
;
235 CreateProcess(NULL
, szPath
, NULL
, NULL
, FALSE
, 0, NULL
, NULL
, &si
, &pi
);
245 case IDC_VOLUME3_BTN
:
247 wsprintf(szPath
, L
"sndvol32.exe -d %d",
248 GetDevNum(GetDlgItem(hwndDlg
, IDC_DEVICE_MIDI_LIST
), MIXER_OBJECTF_MIDIOUT
));
250 ZeroMemory(&si
, sizeof(si
));
252 si
.wShowWindow
= SW_SHOW
;
254 CreateProcess(NULL
, szPath
, NULL
, NULL
, FALSE
, 0, NULL
, NULL
, &si
, &pi
);