mirror of
https://github.com/reactos/reactos.git
synced 2025-04-20 20:36:35 +00:00
[MMSYS] Properly save Audio/MIDI In/Out in the registry
CORE-15582
This commit is contained in:
parent
9ae373a023
commit
c95f335893
1 changed files with 150 additions and 5 deletions
|
@ -10,8 +10,20 @@
|
||||||
|
|
||||||
#include "mmsys.h"
|
#include "mmsys.h"
|
||||||
|
|
||||||
|
typedef struct _GLOBAL_DATA
|
||||||
|
{
|
||||||
|
BOOL bNoAudioOut;
|
||||||
|
BOOL bNoAudioIn;
|
||||||
|
BOOL bNoMIDIOut;
|
||||||
|
|
||||||
|
BOOL bAudioOutChanged;
|
||||||
|
BOOL bAudioInChanged;
|
||||||
|
BOOL bMIDIOutChanged;
|
||||||
|
|
||||||
|
} GLOBAL_DATA, *PGLOBAL_DATA;
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
InitAudioDlg(HWND hwnd)
|
InitAudioDlg(HWND hwnd, PGLOBAL_DATA pGlobalData)
|
||||||
{
|
{
|
||||||
WAVEOUTCAPSW waveOutputPaps;
|
WAVEOUTCAPSW waveOutputPaps;
|
||||||
WAVEINCAPS waveInputPaps;
|
WAVEINCAPS waveInputPaps;
|
||||||
|
@ -32,6 +44,7 @@ InitAudioDlg(HWND hwnd)
|
||||||
{
|
{
|
||||||
Res = SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)szNoDevices);
|
Res = SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)szNoDevices);
|
||||||
SendMessage(hCB, CB_SETCURSEL, (WPARAM) Res, 0);
|
SendMessage(hCB, CB_SETCURSEL, (WPARAM) Res, 0);
|
||||||
|
pGlobalData->bNoAudioOut = TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -72,6 +85,7 @@ InitAudioDlg(HWND hwnd)
|
||||||
{
|
{
|
||||||
Res = SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)szNoDevices);
|
Res = SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)szNoDevices);
|
||||||
SendMessage(hCB, CB_SETCURSEL, (WPARAM) Res, 0);
|
SendMessage(hCB, CB_SETCURSEL, (WPARAM) Res, 0);
|
||||||
|
pGlobalData->bNoAudioIn = TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -113,6 +127,7 @@ InitAudioDlg(HWND hwnd)
|
||||||
{
|
{
|
||||||
Res = SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)szNoDevices);
|
Res = SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)szNoDevices);
|
||||||
SendMessage(hCB, CB_SETCURSEL, (WPARAM) Res, 0);
|
SendMessage(hCB, CB_SETCURSEL, (WPARAM) Res, 0);
|
||||||
|
pGlobalData->bNoMIDIOut = TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -146,6 +161,60 @@ InitAudioDlg(HWND hwnd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
UpdateRegistryString(HWND hwnd, INT ctrl, LPWSTR key, LPWSTR value)
|
||||||
|
{
|
||||||
|
HWND hwndCombo = GetDlgItem(hwnd, ctrl);
|
||||||
|
INT CurSel = SendMessage(hwndCombo, CB_GETCURSEL, 0, 0);
|
||||||
|
UINT TextLen;
|
||||||
|
WCHAR SelectedDevice[MAX_PATH] = {0};
|
||||||
|
HKEY hKey;
|
||||||
|
|
||||||
|
if (CurSel == CB_ERR)
|
||||||
|
return;
|
||||||
|
|
||||||
|
TextLen = SendMessageW(hwndCombo, CB_GETLBTEXTLEN, CurSel, 0) + 1;
|
||||||
|
|
||||||
|
if (TextLen > _countof(SelectedDevice))
|
||||||
|
return;
|
||||||
|
|
||||||
|
SendMessageW(hwndCombo, CB_GETLBTEXT, CurSel, (LPARAM)SelectedDevice);
|
||||||
|
|
||||||
|
if (RegCreateKeyExW(HKEY_CURRENT_USER, key, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS)
|
||||||
|
return;
|
||||||
|
|
||||||
|
RegSetValueExW(hKey, value, 0, REG_SZ, (BYTE *)SelectedDevice, (wcslen(SelectedDevice) + 1) * sizeof(WCHAR));
|
||||||
|
RegCloseKey(hKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
SaveAudioDlg(HWND hwnd, PGLOBAL_DATA pGlobalData)
|
||||||
|
{
|
||||||
|
if (pGlobalData->bAudioOutChanged)
|
||||||
|
{
|
||||||
|
UpdateRegistryString(hwnd,
|
||||||
|
IDC_DEVICE_PLAY_LIST,
|
||||||
|
L"Software\\Microsoft\\Multimedia\\Sound Mapper",
|
||||||
|
L"Playback");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pGlobalData->bAudioInChanged)
|
||||||
|
{
|
||||||
|
UpdateRegistryString(hwnd,
|
||||||
|
IDC_DEVICE_REC_LIST,
|
||||||
|
L"Software\\Microsoft\\Multimedia\\Sound Mapper",
|
||||||
|
L"Record");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pGlobalData->bMIDIOutChanged)
|
||||||
|
{
|
||||||
|
UpdateRegistryString(hwnd,
|
||||||
|
IDC_DEVICE_MIDI_LIST,
|
||||||
|
L"Software\\Microsoft\\Windows\\CurrentVersion\\Multimedia\\MIDIMap",
|
||||||
|
L"szPname");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static UINT
|
static UINT
|
||||||
GetDevNum(HWND hControl, DWORD Id)
|
GetDevNum(HWND hControl, DWORD Id)
|
||||||
{
|
{
|
||||||
|
@ -174,9 +243,9 @@ AudioDlgProc(HWND hwndDlg,
|
||||||
WPARAM wParam,
|
WPARAM wParam,
|
||||||
LPARAM lParam)
|
LPARAM lParam)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(lParam);
|
PGLOBAL_DATA pGlobalData;
|
||||||
UNREFERENCED_PARAMETER(wParam);
|
|
||||||
UNREFERENCED_PARAMETER(hwndDlg);
|
pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
|
||||||
|
|
||||||
switch(uMsg)
|
switch(uMsg)
|
||||||
{
|
{
|
||||||
|
@ -184,7 +253,13 @@ AudioDlgProc(HWND hwndDlg,
|
||||||
{
|
{
|
||||||
UINT NumWavOut = waveOutGetNumDevs();
|
UINT NumWavOut = waveOutGetNumDevs();
|
||||||
|
|
||||||
InitAudioDlg(hwndDlg);
|
pGlobalData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBAL_DATA));
|
||||||
|
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
|
||||||
|
|
||||||
|
if (!pGlobalData)
|
||||||
|
break;
|
||||||
|
|
||||||
|
InitAudioDlg(hwndDlg, pGlobalData);
|
||||||
|
|
||||||
if (!NumWavOut)
|
if (!NumWavOut)
|
||||||
{
|
{
|
||||||
|
@ -199,6 +274,27 @@ AudioDlgProc(HWND hwndDlg,
|
||||||
EnableWindow(GetDlgItem(hwndDlg, IDC_VOLUME3_BTN), FALSE);
|
EnableWindow(GetDlgItem(hwndDlg, IDC_VOLUME3_BTN), FALSE);
|
||||||
EnableWindow(GetDlgItem(hwndDlg, IDC_ADV3_BTN), FALSE);
|
EnableWindow(GetDlgItem(hwndDlg, IDC_ADV3_BTN), FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pGlobalData->bNoAudioOut)
|
||||||
|
{
|
||||||
|
EnableWindow(GetDlgItem(hwndDlg, IDC_DEVICE_PLAY_LIST), FALSE);
|
||||||
|
EnableWindow(GetDlgItem(hwndDlg, IDC_VOLUME1_BTN), FALSE);
|
||||||
|
EnableWindow(GetDlgItem(hwndDlg, IDC_ADV2_BTN), FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pGlobalData->bNoAudioIn)
|
||||||
|
{
|
||||||
|
EnableWindow(GetDlgItem(hwndDlg, IDC_DEVICE_REC_LIST), FALSE);
|
||||||
|
EnableWindow(GetDlgItem(hwndDlg, IDC_VOLUME2_BTN), FALSE);
|
||||||
|
EnableWindow(GetDlgItem(hwndDlg, IDC_ADV1_BTN), FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pGlobalData->bNoMIDIOut)
|
||||||
|
{
|
||||||
|
EnableWindow(GetDlgItem(hwndDlg, IDC_DEVICE_MIDI_LIST), FALSE);
|
||||||
|
EnableWindow(GetDlgItem(hwndDlg, IDC_VOLUME3_BTN), FALSE);
|
||||||
|
EnableWindow(GetDlgItem(hwndDlg, IDC_ADV3_BTN), FALSE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -208,6 +304,9 @@ AudioDlgProc(HWND hwndDlg,
|
||||||
PROCESS_INFORMATION pi;
|
PROCESS_INFORMATION pi;
|
||||||
WCHAR szPath[MAX_PATH];
|
WCHAR szPath[MAX_PATH];
|
||||||
|
|
||||||
|
if (!pGlobalData)
|
||||||
|
break;
|
||||||
|
|
||||||
switch(LOWORD(wParam))
|
switch(LOWORD(wParam))
|
||||||
{
|
{
|
||||||
case IDC_VOLUME1_BTN:
|
case IDC_VOLUME1_BTN:
|
||||||
|
@ -269,9 +368,55 @@ AudioDlgProc(HWND hwndDlg,
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case IDC_DEVICE_PLAY_LIST:
|
||||||
|
{
|
||||||
|
if (HIWORD(wParam) == CBN_SELCHANGE)
|
||||||
|
{
|
||||||
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
||||||
|
pGlobalData->bAudioOutChanged = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IDC_DEVICE_REC_LIST:
|
||||||
|
{
|
||||||
|
if (HIWORD(wParam) == CBN_SELCHANGE)
|
||||||
|
{
|
||||||
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
||||||
|
pGlobalData->bAudioInChanged = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
case IDC_DEVICE_MIDI_LIST:
|
||||||
|
{
|
||||||
|
if (HIWORD(wParam) == CBN_SELCHANGE)
|
||||||
|
{
|
||||||
|
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
|
||||||
|
pGlobalData->bMIDIOutChanged = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_DESTROY:
|
||||||
|
if (!pGlobalData)
|
||||||
|
break;
|
||||||
|
|
||||||
|
HeapFree(GetProcessHeap(), 0, pGlobalData);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_NOTIFY:
|
||||||
|
if (!pGlobalData)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (((LPNMHDR)lParam)->code == (UINT)PSN_APPLY)
|
||||||
|
{
|
||||||
|
SaveAudioDlg(hwndDlg, pGlobalData);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
Loading…
Reference in a new issue