[MMSYS] Multimedia Control Panel diverse fixes (#4572)

- Use Unicode (WCHAR) instead of TCHAR
- Code formatting
- Use string safe functions
- Close handles after calling `CreateProcess`
- Save sound path as `REG_EXPAND_SZ` only if the path
  contains '%' character, like Windows does
- Fix `wcsdup` leaks

Reviewed-by: Mark Jansen <mark.jansen@reactos.org>
Reviewed-by: Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Reviewed-by: Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Reviewed-by: Stanislav Motylkov <x86corez@gmail.com>
This commit is contained in:
Thamatip Chitpong 2022-09-15 00:06:22 +07:00 committed by GitHub
parent 67f7971fa2
commit 781c247bd3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 559 additions and 523 deletions

View file

@ -26,15 +26,15 @@ VOID
InitAudioDlg(HWND hwnd, PGLOBAL_DATA pGlobalData) InitAudioDlg(HWND hwnd, PGLOBAL_DATA pGlobalData)
{ {
WAVEOUTCAPSW waveOutputPaps; WAVEOUTCAPSW waveOutputPaps;
WAVEINCAPS waveInputPaps; WAVEINCAPSW waveInputPaps;
MIDIOUTCAPS midiOutCaps; MIDIOUTCAPSW midiOutCaps;
TCHAR szNoDevices[256]; WCHAR szNoDevices[256];
UINT DevsNum; UINT DevsNum;
UINT uIndex; UINT uIndex;
HWND hCB; HWND hCB;
LRESULT Res; LRESULT Res;
LoadString(hApplet, IDS_NO_DEVICES, szNoDevices, _countof(szNoDevices)); LoadStringW(hApplet, IDS_NO_DEVICES, szNoDevices, _countof(szNoDevices));
// Init sound playback devices list // Init sound playback devices list
hCB = GetDlgItem(hwnd, IDC_DEVICE_PLAY_LIST); hCB = GetDlgItem(hwnd, IDC_DEVICE_PLAY_LIST);
@ -42,8 +42,8 @@ InitAudioDlg(HWND hwnd, PGLOBAL_DATA pGlobalData)
DevsNum = waveOutGetNumDevs(); DevsNum = waveOutGetNumDevs();
if (DevsNum < 1) if (DevsNum < 1)
{ {
Res = SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)szNoDevices); Res = SendMessageW(hCB, CB_ADDSTRING, 0, (LPARAM)szNoDevices);
SendMessage(hCB, CB_SETCURSEL, (WPARAM) Res, 0); SendMessageW(hCB, CB_SETCURSEL, (WPARAM)Res, 0);
pGlobalData->bNoAudioOut = TRUE; pGlobalData->bNoAudioOut = TRUE;
} }
else else
@ -56,7 +56,7 @@ InitAudioDlg(HWND hwnd, PGLOBAL_DATA pGlobalData)
if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Multimedia\\Sound Mapper", 0, KEY_READ, &hKey) == ERROR_SUCCESS) if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Multimedia\\Sound Mapper", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{ {
RegQueryValueExW(hKey, L"Playback", NULL, NULL, (LPBYTE)DefaultDevice, &dwSize); RegQueryValueExW(hKey, L"Playback", NULL, NULL, (LPBYTE)DefaultDevice, &dwSize);
DefaultDevice[MAX_PATH-1] = L'\0'; DefaultDevice[_countof(DefaultDevice) - 1] = UNICODE_NULL;
RegCloseKey(hKey); RegCloseKey(hKey);
} }
@ -65,16 +65,16 @@ InitAudioDlg(HWND hwnd, PGLOBAL_DATA pGlobalData)
if (waveOutGetDevCapsW(uIndex, &waveOutputPaps, sizeof(waveOutputPaps))) if (waveOutGetDevCapsW(uIndex, &waveOutputPaps, sizeof(waveOutputPaps)))
continue; continue;
Res = SendMessageW(hCB, CB_ADDSTRING, 0, (LPARAM) waveOutputPaps.szPname); Res = SendMessageW(hCB, CB_ADDSTRING, 0, (LPARAM)waveOutputPaps.szPname);
if (CB_ERR != Res) if (CB_ERR != Res)
{ {
SendMessage(hCB, CB_SETITEMDATA, Res, (LPARAM) uIndex); SendMessageW(hCB, CB_SETITEMDATA, Res, (LPARAM)uIndex);
if (!wcsicmp(waveOutputPaps.szPname, DefaultDevice)) if (!_wcsicmp(waveOutputPaps.szPname, DefaultDevice))
DefaultIndex = Res; DefaultIndex = Res;
} }
} }
SendMessage(hCB, CB_SETCURSEL, (WPARAM) DefaultIndex, 0); SendMessageW(hCB, CB_SETCURSEL, (WPARAM)DefaultIndex, 0);
} }
// Init sound recording devices list // Init sound recording devices list
@ -83,8 +83,8 @@ InitAudioDlg(HWND hwnd, PGLOBAL_DATA pGlobalData)
DevsNum = waveInGetNumDevs(); DevsNum = waveInGetNumDevs();
if (DevsNum < 1) if (DevsNum < 1)
{ {
Res = SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)szNoDevices); Res = SendMessageW(hCB, CB_ADDSTRING, 0, (LPARAM)szNoDevices);
SendMessage(hCB, CB_SETCURSEL, (WPARAM) Res, 0); SendMessageW(hCB, CB_SETCURSEL, (WPARAM)Res, 0);
pGlobalData->bNoAudioIn = TRUE; pGlobalData->bNoAudioIn = TRUE;
} }
else else
@ -97,26 +97,26 @@ InitAudioDlg(HWND hwnd, PGLOBAL_DATA pGlobalData)
if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Multimedia\\Sound Mapper", 0, KEY_READ, &hKey) == ERROR_SUCCESS) if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Multimedia\\Sound Mapper", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{ {
RegQueryValueExW(hKey, L"Record", NULL, NULL, (LPBYTE)DefaultDevice, &dwSize); RegQueryValueExW(hKey, L"Record", NULL, NULL, (LPBYTE)DefaultDevice, &dwSize);
DefaultDevice[MAX_PATH-1] = L'\0'; DefaultDevice[_countof(DefaultDevice) - 1] = UNICODE_NULL;
RegCloseKey(hKey); RegCloseKey(hKey);
} }
for (uIndex = 0; uIndex < DevsNum; uIndex++) for (uIndex = 0; uIndex < DevsNum; uIndex++)
{ {
if (waveInGetDevCaps(uIndex, &waveInputPaps, sizeof(waveInputPaps))) if (waveInGetDevCapsW(uIndex, &waveInputPaps, sizeof(waveInputPaps)))
continue; continue;
Res = SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM) waveInputPaps.szPname); Res = SendMessageW(hCB, CB_ADDSTRING, 0, (LPARAM)waveInputPaps.szPname);
if (CB_ERR != Res) if (CB_ERR != Res)
{ {
SendMessage(hCB, CB_SETITEMDATA, Res, (LPARAM) uIndex); SendMessageW(hCB, CB_SETITEMDATA, Res, (LPARAM)uIndex);
if (!wcsicmp(waveInputPaps.szPname, DefaultDevice)) if (!_wcsicmp(waveInputPaps.szPname, DefaultDevice))
DefaultIndex = Res; DefaultIndex = Res;
} }
} }
SendMessage(hCB, CB_SETCURSEL, (WPARAM) DefaultIndex, 0); SendMessageW(hCB, CB_SETCURSEL, (WPARAM)DefaultIndex, 0);
} }
// Init MIDI devices list // Init MIDI devices list
@ -125,8 +125,8 @@ InitAudioDlg(HWND hwnd, PGLOBAL_DATA pGlobalData)
DevsNum = midiOutGetNumDevs(); DevsNum = midiOutGetNumDevs();
if (DevsNum < 1) if (DevsNum < 1)
{ {
Res = SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM)szNoDevices); Res = SendMessageW(hCB, CB_ADDSTRING, 0, (LPARAM)szNoDevices);
SendMessage(hCB, CB_SETCURSEL, (WPARAM) Res, 0); SendMessageW(hCB, CB_SETCURSEL, (WPARAM)Res, 0);
pGlobalData->bNoMIDIOut = TRUE; pGlobalData->bNoMIDIOut = TRUE;
} }
else else
@ -139,25 +139,25 @@ InitAudioDlg(HWND hwnd, PGLOBAL_DATA pGlobalData)
if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Multimedia\\MIDIMap", 0, KEY_READ, &hKey) == ERROR_SUCCESS) if (RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Multimedia\\MIDIMap", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{ {
RegQueryValueExW(hKey, L"szPname", NULL, NULL, (LPBYTE)DefaultDevice, &dwSize); RegQueryValueExW(hKey, L"szPname", NULL, NULL, (LPBYTE)DefaultDevice, &dwSize);
DefaultDevice[MAX_PATH-1] = L'\0'; DefaultDevice[_countof(DefaultDevice) - 1] = UNICODE_NULL;
RegCloseKey(hKey); RegCloseKey(hKey);
} }
for (uIndex = 0; uIndex < DevsNum; uIndex++) for (uIndex = 0; uIndex < DevsNum; uIndex++)
{ {
if (midiOutGetDevCaps(uIndex, &midiOutCaps, sizeof(midiOutCaps))) if (midiOutGetDevCapsW(uIndex, &midiOutCaps, sizeof(midiOutCaps)))
continue; continue;
Res = SendMessage(hCB, CB_ADDSTRING, 0, (LPARAM) midiOutCaps.szPname); Res = SendMessageW(hCB, CB_ADDSTRING, 0, (LPARAM)midiOutCaps.szPname);
if (CB_ERR != Res) if (CB_ERR != Res)
{ {
SendMessage(hCB, CB_SETITEMDATA, Res, (LPARAM) uIndex); SendMessageW(hCB, CB_SETITEMDATA, Res, (LPARAM)uIndex);
if (!wcsicmp(midiOutCaps.szPname, DefaultDevice)) if (!_wcsicmp(midiOutCaps.szPname, DefaultDevice))
DefaultIndex = Res; DefaultIndex = Res;
} }
} }
SendMessage(hCB, CB_SETCURSEL, (WPARAM) DefaultIndex, 0); SendMessageW(hCB, CB_SETCURSEL, (WPARAM)DefaultIndex, 0);
} }
} }
@ -165,7 +165,7 @@ VOID
UpdateRegistryString(HWND hwnd, INT ctrl, LPWSTR key, LPWSTR value) UpdateRegistryString(HWND hwnd, INT ctrl, LPWSTR key, LPWSTR value)
{ {
HWND hwndCombo = GetDlgItem(hwnd, ctrl); HWND hwndCombo = GetDlgItem(hwnd, ctrl);
INT CurSel = SendMessage(hwndCombo, CB_GETCURSEL, 0, 0); INT CurSel = SendMessageW(hwndCombo, CB_GETCURSEL, 0, 0);
UINT TextLen; UINT TextLen;
WCHAR SelectedDevice[MAX_PATH] = {0}; WCHAR SelectedDevice[MAX_PATH] = {0};
HKEY hKey; HKEY hKey;
@ -183,7 +183,7 @@ UpdateRegistryString(HWND hwnd, INT ctrl, LPWSTR key, LPWSTR value)
if (RegCreateKeyExW(HKEY_CURRENT_USER, key, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS) if (RegCreateKeyExW(HKEY_CURRENT_USER, key, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS)
return; return;
RegSetValueExW(hKey, value, 0, REG_SZ, (BYTE *)SelectedDevice, (wcslen(SelectedDevice) + 1) * sizeof(WCHAR)); RegSetValueExW(hKey, value, 0, REG_SZ, (BYTE*)SelectedDevice, (wcslen(SelectedDevice) + 1) * sizeof(WCHAR));
RegCloseKey(hKey); RegCloseKey(hKey);
} }
@ -221,12 +221,12 @@ GetDevNum(HWND hControl, DWORD Id)
int iCurSel; int iCurSel;
UINT DevNum; UINT DevNum;
iCurSel = SendMessage(hControl, CB_GETCURSEL, 0, 0); iCurSel = SendMessageW(hControl, CB_GETCURSEL, 0, 0);
if (iCurSel == CB_ERR) if (iCurSel == CB_ERR)
return 0; return 0;
DevNum = (UINT) SendMessage(hControl, CB_GETITEMDATA, iCurSel, 0); DevNum = (UINT)SendMessageW(hControl, CB_GETITEMDATA, iCurSel, 0);
if (DevNum == (UINT) CB_ERR) if (DevNum == (UINT) CB_ERR)
return 0; return 0;
@ -245,16 +245,16 @@ AudioDlgProc(HWND hwndDlg,
{ {
PGLOBAL_DATA pGlobalData; PGLOBAL_DATA pGlobalData;
pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); pGlobalData = (PGLOBAL_DATA)GetWindowLongPtrW(hwndDlg, DWLP_USER);
switch(uMsg) switch (uMsg)
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
{ {
UINT NumWavOut = waveOutGetNumDevs(); UINT NumWavOut = waveOutGetNumDevs();
pGlobalData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBAL_DATA)); pGlobalData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBAL_DATA));
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); SetWindowLongPtrW(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
if (!pGlobalData) if (!pGlobalData)
break; break;
@ -300,18 +300,18 @@ AudioDlgProc(HWND hwndDlg,
case WM_COMMAND: case WM_COMMAND:
{ {
STARTUPINFO si; STARTUPINFOW si;
PROCESS_INFORMATION pi; PROCESS_INFORMATION pi;
WCHAR szPath[MAX_PATH]; WCHAR szPath[MAX_PATH];
if (!pGlobalData) if (!pGlobalData)
break; break;
switch(LOWORD(wParam)) switch (LOWORD(wParam))
{ {
case IDC_VOLUME1_BTN: case IDC_VOLUME1_BTN:
{ {
wsprintf(szPath, L"sndvol32.exe -d %d", StringCchPrintfW(szPath, _countof(szPath), L"sndvol32.exe -d %d",
GetDevNum(GetDlgItem(hwndDlg, IDC_DEVICE_PLAY_LIST), MIXER_OBJECTF_WAVEOUT)); GetDevNum(GetDlgItem(hwndDlg, IDC_DEVICE_PLAY_LIST), MIXER_OBJECTF_WAVEOUT));
ZeroMemory(&si, sizeof(si)); ZeroMemory(&si, sizeof(si));
@ -319,7 +319,11 @@ AudioDlgProc(HWND hwndDlg,
si.dwFlags = STARTF_USESHOWWINDOW; si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW; si.wShowWindow = SW_SHOW;
CreateProcess(NULL, szPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); if (CreateProcessW(NULL, szPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
} }
break; break;
@ -331,7 +335,7 @@ AudioDlgProc(HWND hwndDlg,
case IDC_VOLUME2_BTN: case IDC_VOLUME2_BTN:
{ {
wsprintf(szPath, L"sndvol32.exe -r -d %d", StringCchPrintfW(szPath, _countof(szPath), L"sndvol32.exe -r -d %d",
GetDevNum(GetDlgItem(hwndDlg, IDC_DEVICE_REC_LIST), MIXER_OBJECTF_WAVEIN)); GetDevNum(GetDlgItem(hwndDlg, IDC_DEVICE_REC_LIST), MIXER_OBJECTF_WAVEIN));
ZeroMemory(&si, sizeof(si)); ZeroMemory(&si, sizeof(si));
@ -339,7 +343,11 @@ AudioDlgProc(HWND hwndDlg,
si.dwFlags = STARTF_USESHOWWINDOW; si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW; si.wShowWindow = SW_SHOW;
CreateProcess(NULL, szPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); if (CreateProcessW(NULL, szPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
} }
break; break;
@ -351,7 +359,7 @@ AudioDlgProc(HWND hwndDlg,
case IDC_VOLUME3_BTN: case IDC_VOLUME3_BTN:
{ {
wsprintf(szPath, L"sndvol32.exe -d %d", StringCchPrintfW(szPath, _countof(szPath), L"sndvol32.exe -d %d",
GetDevNum(GetDlgItem(hwndDlg, IDC_DEVICE_MIDI_LIST), MIXER_OBJECTF_MIDIOUT)); GetDevNum(GetDlgItem(hwndDlg, IDC_DEVICE_MIDI_LIST), MIXER_OBJECTF_MIDIOUT));
ZeroMemory(&si, sizeof(si)); ZeroMemory(&si, sizeof(si));
@ -359,7 +367,11 @@ AudioDlgProc(HWND hwndDlg,
si.dwFlags = STARTF_USESHOWWINDOW; si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW; si.wShowWindow = SW_SHOW;
CreateProcess(NULL, szPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); if (CreateProcessW(NULL, szPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
} }
break; break;

View file

@ -33,14 +33,14 @@ typedef struct
LPWSTR DefaultName; LPWSTR DefaultName;
UINT LocalizedResId; UINT LocalizedResId;
LPWSTR FileName; LPWSTR FileName;
}EVENT_LABEL_ITEM; } EVENT_LABEL_ITEM;
typedef struct typedef struct
{ {
LPWSTR LabelName; LPWSTR LabelName;
LPWSTR DefaultName; LPWSTR DefaultName;
UINT IconId; UINT IconId;
}SYSTEM_SCHEME_ITEM; } SYSTEM_SCHEME_ITEM;
static EVENT_LABEL_ITEM EventLabels[] = static EVENT_LABEL_ITEM EventLabels[] =
{ {
@ -89,12 +89,12 @@ DeviceCreateHardwarePageEx(HWND hWndParent,
UINT uNumberOfGuids, UINT uNumberOfGuids,
HWPAGE_DISPLAYMODE DisplayMode); HWPAGE_DISPLAYMODE DisplayMode);
typedef BOOL (WINAPI *UpdateDriverForPlugAndPlayDevicesProto)(IN OPTIONAL HWND hwndParent, typedef BOOL (WINAPI *UpdateDriverForPlugAndPlayDevicesProto)(
IN LPCTSTR HardwareId, _In_opt_ HWND hwndParent,
IN LPCTSTR FullInfPath, _In_ LPCWSTR HardwareId,
IN DWORD InstallFlags, _In_ LPCWSTR FullInfPath,
OUT OPTIONAL PBOOL bRebootRequired _In_ DWORD InstallFlags,
); _Out_opt_ PBOOL bRebootRequired);
#define UPDATEDRIVERFORPLUGANDPLAYDEVICES "UpdateDriverForPlugAndPlayDevicesW" #define UPDATEDRIVERFORPLUGANDPLAYDEVICES "UpdateDriverForPlugAndPlayDevicesW"
#define NUM_APPLETS (1) #define NUM_APPLETS (1)
@ -210,14 +210,14 @@ InstallSystemSoundLabels(HKEY hKey)
{ {
if (RegCreateKeyExW(hKey, EventLabels[i].LabelName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, NULL) == ERROR_SUCCESS) if (RegCreateKeyExW(hKey, EventLabels[i].LabelName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, NULL) == ERROR_SUCCESS)
{ {
RegSetValueExW(hSubKey, NULL, 0, REG_SZ, (LPBYTE)EventLabels[i].DefaultName, (wcslen(EventLabels[i].DefaultName)+1) * sizeof(WCHAR)); RegSetValueExW(hSubKey, NULL, 0, REG_SZ, (LPBYTE)EventLabels[i].DefaultName, (wcslen(EventLabels[i].DefaultName) + 1) * sizeof(WCHAR));
swprintf(Buffer, L"@mmsys.cpl,-%u", EventLabels[i].LocalizedResId); StringCchPrintfW(Buffer, _countof(Buffer), L"@mmsys.cpl,-%u", EventLabels[i].LocalizedResId);
RegSetValueExW(hSubKey, L"DispFileName", 0, REG_SZ, (LPBYTE)Buffer, (wcslen(Buffer)+1) * sizeof(WCHAR)); RegSetValueExW(hSubKey, L"DispFileName", 0, REG_SZ, (LPBYTE)Buffer, (wcslen(Buffer) + 1) * sizeof(WCHAR));
RegCloseKey(hSubKey); RegCloseKey(hSubKey);
} }
i++; i++;
}while(EventLabels[i].LabelName); } while (EventLabels[i].LabelName);
} }
VOID VOID
@ -230,11 +230,11 @@ InstallSystemSoundSchemeNames(HKEY hKey)
{ {
if (RegCreateKeyExW(hKey, SystemSchemes[i].LabelName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, NULL) == ERROR_SUCCESS) if (RegCreateKeyExW(hKey, SystemSchemes[i].LabelName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hSubKey, NULL) == ERROR_SUCCESS)
{ {
RegSetValueExW(hSubKey, NULL, 0, REG_SZ, (LPBYTE)SystemSchemes[i].DefaultName, (wcslen(SystemSchemes[i].DefaultName)+1) * sizeof(WCHAR)); RegSetValueExW(hSubKey, NULL, 0, REG_SZ, (LPBYTE)SystemSchemes[i].DefaultName, (wcslen(SystemSchemes[i].DefaultName) + 1) * sizeof(WCHAR));
RegCloseKey(hSubKey); RegCloseKey(hSubKey);
} }
i++; i++;
}while(SystemSchemes[i].LabelName); } while (SystemSchemes[i].LabelName);
} }
VOID VOID
@ -247,9 +247,9 @@ InstallDefaultSystemSoundScheme(HKEY hRootKey)
if (RegCreateKeyExW(hRootKey, L".Default", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL) != ERROR_SUCCESS) if (RegCreateKeyExW(hRootKey, L".Default", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL) != ERROR_SUCCESS)
return; return;
RegSetValueExW(hKey, NULL, 0, REG_SZ, (LPBYTE)SystemSchemes[0].DefaultName, (wcslen(SystemSchemes[0].DefaultName)+1) * sizeof(WCHAR)); RegSetValueExW(hKey, NULL, 0, REG_SZ, (LPBYTE)SystemSchemes[0].DefaultName, (wcslen(SystemSchemes[0].DefaultName) + 1) * sizeof(WCHAR));
swprintf(Path, L"@mmsys.cpl,-%u", SystemSchemes[0].IconId); StringCchPrintfW(Path, _countof(Path), L"@mmsys.cpl,-%u", SystemSchemes[0].IconId);
RegSetValueExW(hKey, L"DispFileName", 0, REG_SZ, (LPBYTE)Path, (wcslen(Path)+1) * sizeof(WCHAR)); RegSetValueExW(hKey, L"DispFileName", 0, REG_SZ, (LPBYTE)Path, (wcslen(Path) + 1) * sizeof(WCHAR));
do do
{ {
@ -257,29 +257,29 @@ InstallDefaultSystemSoundScheme(HKEY hRootKey)
{ {
HKEY hScheme; HKEY hScheme;
swprintf(Path, L"%%SystemRoot%%\\media\\%s", EventLabels[i].FileName); StringCchPrintfW(Path, _countof(Path), L"%%SystemRoot%%\\media\\%s", EventLabels[i].FileName);
if (RegCreateKeyExW(hSubKey, L".Current", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hScheme, NULL) == ERROR_SUCCESS) if (RegCreateKeyExW(hSubKey, L".Current", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hScheme, NULL) == ERROR_SUCCESS)
{ {
RegSetValueExW(hScheme, NULL, 0, REG_EXPAND_SZ, (LPBYTE)Path, (wcslen(Path)+1) * sizeof(WCHAR)); RegSetValueExW(hScheme, NULL, 0, REG_EXPAND_SZ, (LPBYTE)Path, (wcslen(Path) + 1) * sizeof(WCHAR));
RegCloseKey(hScheme); RegCloseKey(hScheme);
} }
if (RegCreateKeyExW(hSubKey, L".Default", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hScheme, NULL) == ERROR_SUCCESS) if (RegCreateKeyExW(hSubKey, L".Default", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hScheme, NULL) == ERROR_SUCCESS)
{ {
RegSetValueExW(hScheme, NULL, 0, REG_EXPAND_SZ, (LPBYTE)Path, (wcslen(Path)+1) * sizeof(WCHAR)); RegSetValueExW(hScheme, NULL, 0, REG_EXPAND_SZ, (LPBYTE)Path, (wcslen(Path) + 1) * sizeof(WCHAR));
RegCloseKey(hScheme); RegCloseKey(hScheme);
} }
RegCloseKey(hSubKey); RegCloseKey(hSubKey);
} }
i++; i++;
}while(EventLabels[i].LabelName); } while (EventLabels[i].LabelName);
RegCloseKey(hKey); RegCloseKey(hKey);
} }
VOID VOID
InstallSystemSoundScheme() InstallSystemSoundScheme(VOID)
{ {
HKEY hKey, hSubKey; HKEY hKey, hSubKey;
DWORD dwDisposition; DWORD dwDisposition;
@ -310,7 +310,7 @@ InstallSystemSoundScheme()
if (dwDisposition & REG_CREATED_NEW_KEY) if (dwDisposition & REG_CREATED_NEW_KEY)
{ {
// FIXME // FIXME
RegSetValueExW(hSubKey, NULL, 0, REG_SZ, (LPBYTE)L".Default", (wcslen(L".Default")+1) * sizeof(WCHAR)); RegSetValueExW(hSubKey, NULL, 0, REG_SZ, (LPBYTE)L".Default", sizeof(L".Default"));
} }
} }
@ -328,7 +328,7 @@ IsSoftwareBusPnpEnumeratorInstalled()
GUID SWBusGuid = {STATIC_BUSID_SoftwareDeviceEnumerator}; GUID SWBusGuid = {STATIC_BUSID_SoftwareDeviceEnumerator};
PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData; PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData;
hDevInfo = SetupDiGetClassDevsW(&SWBusGuid, NULL, NULL, DIGCF_DEVICEINTERFACE| DIGCF_PRESENT); hDevInfo = SetupDiGetClassDevsW(&SWBusGuid, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
if (!hDevInfo) if (!hDevInfo)
{ {
// failed // failed
@ -343,7 +343,7 @@ IsSoftwareBusPnpEnumeratorInstalled()
return FALSE; return FALSE;
} }
DeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA_W)HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR) + sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W)); DeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA_W)HeapAlloc(GetProcessHeap(), 0, (MAX_PATH * sizeof(WCHAR)) + sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W));
if (!DeviceInterfaceDetailData) if (!DeviceInterfaceDetailData)
{ {
// failed // failed
@ -352,7 +352,7 @@ IsSoftwareBusPnpEnumeratorInstalled()
} }
DeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W); DeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W);
if (!SetupDiGetDeviceInterfaceDetailW(hDevInfo, &DeviceInterfaceData, DeviceInterfaceDetailData,MAX_PATH * sizeof(WCHAR) + sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W), NULL, NULL)) if (!SetupDiGetDeviceInterfaceDetailW(hDevInfo, &DeviceInterfaceData, DeviceInterfaceDetailData, (MAX_PATH * sizeof(WCHAR)) + sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W), NULL, NULL))
{ {
// failed // failed
HeapFree(GetProcessHeap(), 0, DeviceInterfaceDetailData); HeapFree(GetProcessHeap(), 0, DeviceInterfaceDetailData);
@ -370,32 +370,32 @@ InstallSoftwareBusPnpEnumerator(LPWSTR InfPath, LPCWSTR HardwareIdList)
HDEVINFO DeviceInfoSet = INVALID_HANDLE_VALUE; HDEVINFO DeviceInfoSet = INVALID_HANDLE_VALUE;
SP_DEVINFO_DATA DeviceInfoData; SP_DEVINFO_DATA DeviceInfoData;
GUID ClassGUID; GUID ClassGUID;
TCHAR ClassName[50]; WCHAR ClassName[50];
int Result = 0; int Result = 0;
HMODULE hModule = NULL; HMODULE hModule = NULL;
UpdateDriverForPlugAndPlayDevicesProto UpdateProc; UpdateDriverForPlugAndPlayDevicesProto UpdateProc;
BOOL reboot = FALSE; BOOL reboot = FALSE;
DWORD flags = 0; DWORD flags = 0;
if (!SetupDiGetINFClass(InfPath,&ClassGUID,ClassName,sizeof(ClassName)/sizeof(ClassName[0]),0)) if (!SetupDiGetINFClassW(InfPath, &ClassGUID, ClassName, _countof(ClassName), NULL))
{ {
return -1; return -1;
} }
DeviceInfoSet = SetupDiCreateDeviceInfoList(&ClassGUID,0); DeviceInfoSet = SetupDiCreateDeviceInfoList(&ClassGUID, NULL);
if(DeviceInfoSet == INVALID_HANDLE_VALUE) if (DeviceInfoSet == INVALID_HANDLE_VALUE)
{ {
return -1; return -1;
} }
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
if (!SetupDiCreateDeviceInfo(DeviceInfoSet, ClassName, &ClassGUID, NULL, 0, DICD_GENERATE_ID, &DeviceInfoData)) if (!SetupDiCreateDeviceInfoW(DeviceInfoSet, ClassName, &ClassGUID, NULL, NULL, DICD_GENERATE_ID, &DeviceInfoData))
{ {
SetupDiDestroyDeviceInfoList(DeviceInfoSet); SetupDiDestroyDeviceInfoList(DeviceInfoSet);
return -1; return -1;
} }
if(!SetupDiSetDeviceRegistryProperty(DeviceInfoSet, &DeviceInfoData, SPDRP_HARDWAREID, (LPBYTE)HardwareIdList, (lstrlen(HardwareIdList)+1+1)*sizeof(TCHAR))) if (!SetupDiSetDeviceRegistryPropertyW(DeviceInfoSet, &DeviceInfoData, SPDRP_HARDWAREID, (LPBYTE)HardwareIdList, (wcslen(HardwareIdList) + 1 + 1) * sizeof(WCHAR)))
{ {
SetupDiDestroyDeviceInfoList(DeviceInfoSet); SetupDiDestroyDeviceInfoList(DeviceInfoSet);
return -1; return -1;
@ -407,27 +407,29 @@ InstallSoftwareBusPnpEnumerator(LPWSTR InfPath, LPCWSTR HardwareIdList)
return -1; return -1;
} }
if(GetFileAttributes(InfPath)==(DWORD)(-1)) { if (GetFileAttributesW(InfPath) == INVALID_FILE_ATTRIBUTES)
{
SetupDiDestroyDeviceInfoList(DeviceInfoSet); SetupDiDestroyDeviceInfoList(DeviceInfoSet);
return -1; return -1;
} }
flags |= INSTALLFLAG_FORCE; flags |= INSTALLFLAG_FORCE;
hModule = LoadLibraryW(L"newdev.dll"); hModule = LoadLibraryW(L"newdev.dll");
if(!hModule) { if (!hModule)
{
SetupDiDestroyDeviceInfoList(DeviceInfoSet); SetupDiDestroyDeviceInfoList(DeviceInfoSet);
return -1; return -1;
} }
UpdateProc = (UpdateDriverForPlugAndPlayDevicesProto)GetProcAddress(hModule,UPDATEDRIVERFORPLUGANDPLAYDEVICES); UpdateProc = (UpdateDriverForPlugAndPlayDevicesProto)GetProcAddress(hModule, UPDATEDRIVERFORPLUGANDPLAYDEVICES);
if(!UpdateProc) if (!UpdateProc)
{ {
SetupDiDestroyDeviceInfoList(DeviceInfoSet); SetupDiDestroyDeviceInfoList(DeviceInfoSet);
FreeLibrary(hModule); FreeLibrary(hModule);
return -1; return -1;
} }
if(!UpdateProc(NULL, HardwareIdList, InfPath, flags, &reboot)) if (!UpdateProc(NULL, HardwareIdList, InfPath, flags, &reboot))
{ {
SetupDiDestroyDeviceInfoList(DeviceInfoSet); SetupDiDestroyDeviceInfoList(DeviceInfoSet);
FreeLibrary(hModule); FreeLibrary(hModule);
@ -443,7 +445,6 @@ DWORD
MMSYS_InstallDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData) MMSYS_InstallDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData)
{ {
UINT Length; UINT Length;
LPWSTR pBuffer;
WCHAR szBuffer[MAX_PATH]; WCHAR szBuffer[MAX_PATH];
HINF hInf; HINF hInf;
PVOID Context; PVOID Context;
@ -458,19 +459,14 @@ MMSYS_InstallDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData)
!IsEqualIID(&pspDevInfoData->ClassGuid, &GUID_DEVCLASS_MEDIA)) !IsEqualIID(&pspDevInfoData->ClassGuid, &GUID_DEVCLASS_MEDIA))
return ERROR_DI_DO_DEFAULT; return ERROR_DI_DO_DEFAULT;
Length = GetWindowsDirectoryW(szBuffer, MAX_PATH); Length = GetWindowsDirectoryW(szBuffer, _countof(szBuffer));
if (!Length || Length >= MAX_PATH - 14) if (!Length || Length >= _countof(szBuffer) - CONST_STR_LEN(L"\\inf\\audio.inf"))
{ {
return ERROR_GEN_FAILURE; return ERROR_GEN_FAILURE;
} }
pBuffer = PathAddBackslashW(szBuffer); //PathCchAppend(szBuffer, _countof(szBuffer), L"inf\\audio.inf");
if (!pBuffer) StringCchCatW(szBuffer, _countof(szBuffer), L"\\inf\\audio.inf");
{
return ERROR_GEN_FAILURE;
}
wcscpy(pBuffer, L"inf\\audio.inf");
hInf = SetupOpenInfFileW(szBuffer, hInf = SetupOpenInfFileW(szBuffer,
NULL, NULL,
@ -513,52 +509,54 @@ MMSYS_InstallDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData)
if (!IsSoftwareBusPnpEnumeratorInstalled()) if (!IsSoftwareBusPnpEnumeratorInstalled())
{ {
Length = GetWindowsDirectoryW(szBuffer, MAX_PATH); Length = GetWindowsDirectoryW(szBuffer, _countof(szBuffer));
if (!Length || Length >= MAX_PATH - 14) if (!Length || Length >= _countof(szBuffer) - CONST_STR_LEN(L"\\inf\\machine.inf"))
{ {
return ERROR_GEN_FAILURE; return ERROR_GEN_FAILURE;
} }
pBuffer = PathAddBackslashW(szBuffer); //PathCchAppend(szBuffer, _countof(szBuffer), L"inf\\machine.inf");
if (!pBuffer) StringCchCatW(szBuffer, _countof(szBuffer), L"\\inf\\machine.inf");
{
return ERROR_GEN_FAILURE;
}
wcscpy(pBuffer, L"inf\\machine.inf");
InstallSoftwareBusPnpEnumerator(szBuffer, L"ROOT\\SWENUM\0"); InstallSoftwareBusPnpEnumerator(szBuffer, L"ROOT\\SWENUM\0");
} }
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT); hSCManager = OpenSCManagerW(NULL, NULL, SC_MANAGER_CONNECT);
if (!hSCManager) if (!hSCManager)
{ {
return ERROR_DI_DO_DEFAULT; return ERROR_DI_DO_DEFAULT;
} }
hService = OpenService(hSCManager, L"AudioSrv", SERVICE_ALL_ACCESS); hService = OpenServiceW(hSCManager, L"AudioSrv", SERVICE_ALL_ACCESS);
if (hService) if (hService)
{ {
/* Make AudioSrv start automatically */ /* Make AudioSrv start automatically */
ChangeServiceConfig(hService, SERVICE_NO_CHANGE, SERVICE_AUTO_START, SERVICE_NO_CHANGE, NULL, NULL, NULL, NULL, NULL, NULL, NULL); ChangeServiceConfigW(hService, SERVICE_NO_CHANGE, SERVICE_AUTO_START, SERVICE_NO_CHANGE, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
StartService(hService, 0, NULL); StartServiceW(hService, 0, NULL);
CloseServiceHandle(hService); CloseServiceHandle(hService);
} }
CloseServiceHandle(hSCManager); CloseServiceHandle(hSCManager);
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Drivers32", 0, GENERIC_READ | GENERIC_WRITE, &hKey) == ERROR_SUCCESS) if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Drivers32", 0, KEY_READ | KEY_WRITE, &hKey) == ERROR_SUCCESS)
{ {
szBuffer[Length] = '\0'; Length = GetSystemDirectoryW(szBuffer, _countof(szBuffer));
pBuffer = PathAddBackslashW(szBuffer); if (!Length || Length >= _countof(szBuffer) - CONST_STR_LEN(L"\\wdmaud.drv"))
wcscpy(pBuffer, L"system32\\wdmaud.drv"); {
RegCloseKey(hKey);
return ERROR_DI_DO_DEFAULT;
}
for(Index = 1; Index <= 4; Index++) //PathCchAppend(szBuffer, _countof(szBuffer), L"wdmaud.drv");
StringCchCatW(szBuffer, _countof(szBuffer), L"\\wdmaud.drv");
for (Index = 1; Index <= 4; Index++)
{ {
swprintf(WaveName, L"wave%u", Index); StringCchPrintfW(WaveName, _countof(WaveName), L"wave%u", Index);
if (RegQueryValueExW(hKey, WaveName, 0, NULL, NULL, &BufferSize) != ERROR_MORE_DATA) if (RegQueryValueExW(hKey, WaveName, 0, NULL, NULL, &BufferSize) != ERROR_MORE_DATA)
{ {
/* Store new audio driver entry */ /* Store new audio driver entry */
RegSetValueExW(hKey, WaveName, 0, REG_SZ, (LPBYTE)szBuffer, (wcslen(szBuffer)+1) * sizeof(WCHAR)); RegSetValueExW(hKey, WaveName, 0, REG_SZ, (LPBYTE)szBuffer, (wcslen(szBuffer) + 1) * sizeof(WCHAR));
break; break;
} }
else else
@ -569,9 +567,9 @@ MMSYS_InstallDevice(HDEVINFO hDevInfo, PSP_DEVINFO_DATA pspDevInfoData)
if (RegQueryValueExW(hKey, WaveName, 0, NULL, (LPBYTE)Buffer, &BufferSize) == ERROR_SUCCESS) if (RegQueryValueExW(hKey, WaveName, 0, NULL, (LPBYTE)Buffer, &BufferSize) == ERROR_SUCCESS)
{ {
/* Make sure the buffer is zero terminated */ /* Make sure the buffer is zero terminated */
Buffer[MAX_PATH-1] = L'\0'; Buffer[_countof(Buffer) - 1] = UNICODE_NULL;
if (!wcsicmp(Buffer, szBuffer)) if (!_wcsicmp(Buffer, szBuffer))
{ {
/* An entry already exists */ /* An entry already exists */
break; break;
@ -651,7 +649,7 @@ HardwareDlgProc(HWND hwndDlg,
{ {
UNREFERENCED_PARAMETER(lParam); UNREFERENCED_PARAMETER(lParam);
UNREFERENCED_PARAMETER(wParam); UNREFERENCED_PARAMETER(wParam);
switch(uMsg) switch (uMsg)
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
{ {
@ -662,7 +660,7 @@ HardwareDlgProc(HWND hwndDlg,
/* Create the hardware page */ /* Create the hardware page */
DeviceCreateHardwarePageEx(hwndDlg, DeviceCreateHardwarePageEx(hwndDlg,
Guids, Guids,
sizeof(Guids) / sizeof(Guids[0]), _countof(Guids),
HWPD_LARGELIST); HWPD_LARGELIST);
break; break;
} }
@ -694,50 +692,48 @@ MmSysApplet(HWND hwnd,
LPARAM wParam, LPARAM wParam,
LPARAM lParam) LPARAM lParam)
{ {
PROPSHEETPAGE psp[5]; PROPSHEETPAGEW psp[5];
PROPSHEETHEADER psh; // = { 0 }; PROPSHEETHEADERW psh; // = { 0 };
INT nPage = 0; INT nPage = 0;
UNREFERENCED_PARAMETER(lParam);
UNREFERENCED_PARAMETER(wParam); UNREFERENCED_PARAMETER(wParam);
UNREFERENCED_PARAMETER(uMsg);
if (uMsg == CPL_STARTWPARMSW && lParam != 0) if (uMsg == CPL_STARTWPARMSW && lParam != 0)
nPage = _wtoi((PWSTR)lParam); nPage = _wtoi((PWSTR)lParam);
psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwSize = sizeof(PROPSHEETHEADERW);
psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE | PSH_USEICONID | PSH_USECALLBACK; psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE | PSH_USEICONID | PSH_USECALLBACK;
psh.hwndParent = hwnd; psh.hwndParent = hwnd;
psh.hInstance = hApplet; psh.hInstance = hApplet;
psh.pszIcon = MAKEINTRESOURCEW(IDI_CPLICON); psh.pszIcon = MAKEINTRESOURCEW(IDI_CPLICON);
psh.pszCaption = MAKEINTRESOURCEW(IDS_CPLNAME); psh.pszCaption = MAKEINTRESOURCEW(IDS_CPLNAME);
psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE); psh.nPages = _countof(psp);
psh.nStartPage = 0; psh.nStartPage = 0;
psh.ppsp = psp; psh.ppsp = psp;
psh.pfnCallback = PropSheetProc; psh.pfnCallback = PropSheetProc;
InitPropSheetPage(&psp[0], IDD_VOLUME,VolumeDlgProc); InitPropSheetPage(&psp[0], IDD_VOLUME, VolumeDlgProc);
InitPropSheetPage(&psp[1], IDD_SOUNDS,SoundsDlgProc); InitPropSheetPage(&psp[1], IDD_SOUNDS, SoundsDlgProc);
InitPropSheetPage(&psp[2], IDD_AUDIO,AudioDlgProc); InitPropSheetPage(&psp[2], IDD_AUDIO, AudioDlgProc);
InitPropSheetPage(&psp[3], IDD_VOICE,VoiceDlgProc); InitPropSheetPage(&psp[3], IDD_VOICE, VoiceDlgProc);
InitPropSheetPage(&psp[4], IDD_HARDWARE,HardwareDlgProc); InitPropSheetPage(&psp[4], IDD_HARDWARE, HardwareDlgProc);
if (nPage != 0 && nPage <= psh.nPages) if (nPage != 0 && nPage <= psh.nPages)
psh.nStartPage = nPage; psh.nStartPage = nPage;
return (LONG)(PropertySheet(&psh) != -1); return (LONG)(PropertySheetW(&psh) != -1);
} }
VOID VOID
InitPropSheetPage(PROPSHEETPAGE *psp, InitPropSheetPage(PROPSHEETPAGEW *psp,
WORD idDlg, WORD idDlg,
DLGPROC DlgProc) DLGPROC DlgProc)
{ {
ZeroMemory(psp, sizeof(PROPSHEETPAGE)); ZeroMemory(psp, sizeof(PROPSHEETPAGEW));
psp->dwSize = sizeof(PROPSHEETPAGE); psp->dwSize = sizeof(PROPSHEETPAGEW);
psp->dwFlags = PSP_DEFAULT; psp->dwFlags = PSP_DEFAULT;
psp->hInstance = hApplet; psp->hInstance = hApplet;
psp->pszTemplate = MAKEINTRESOURCE(idDlg); psp->pszTemplate = MAKEINTRESOURCEW(idDlg);
psp->pfnDlgProc = DlgProc; psp->pfnDlgProc = DlgProc;
} }
@ -749,7 +745,7 @@ CPlApplet(HWND hwndCpl,
LPARAM lParam1, LPARAM lParam1,
LPARAM lParam2) LPARAM lParam2)
{ {
switch(uMsg) switch (uMsg)
{ {
case CPL_INIT: case CPL_INIT:
return TRUE; return TRUE;
@ -789,28 +785,28 @@ CPlApplet(HWND hwndCpl,
VOID WINAPI VOID WINAPI
ShowAudioPropertySheet(HWND hwnd, ShowAudioPropertySheet(HWND hwnd,
HINSTANCE hInstance, HINSTANCE hInstance,
LPTSTR lpszCmd, LPWSTR lpszCmd,
int nCmdShow) int nCmdShow)
{ {
PROPSHEETPAGE psp[1]; PROPSHEETPAGEW psp[1];
PROPSHEETHEADER psh; PROPSHEETHEADERW psh;
DPRINT("ShowAudioPropertySheet()\n"); DPRINT("ShowAudioPropertySheet()\n");
psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwSize = sizeof(PROPSHEETHEADERW);
psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE | PSH_USEICONID | PSH_USECALLBACK; psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE | PSH_USEICONID | PSH_USECALLBACK;
psh.hwndParent = hwnd; psh.hwndParent = hwnd;
psh.hInstance = hInstance; psh.hInstance = hInstance;
psh.pszIcon = MAKEINTRESOURCEW(IDI_CPLICON); psh.pszIcon = MAKEINTRESOURCEW(IDI_CPLICON);
psh.pszCaption = MAKEINTRESOURCEW(IDS_CPLNAME); psh.pszCaption = MAKEINTRESOURCEW(IDS_CPLNAME);
psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE); psh.nPages = _countof(psp);
psh.nStartPage = 0; psh.nStartPage = 0;
psh.ppsp = psp; psh.ppsp = psp;
psh.pfnCallback = PropSheetProc; psh.pfnCallback = PropSheetProc;
InitPropSheetPage(&psp[0], IDD_AUDIO,AudioDlgProc); InitPropSheetPage(&psp[0], IDD_AUDIO,AudioDlgProc);
PropertySheet(&psh); PropertySheetW(&psh);
} }
VOID WINAPI VOID WINAPI
@ -819,29 +815,29 @@ ShowFullControlPanel(HWND hwnd,
LPSTR lpszCmd, LPSTR lpszCmd,
int nCmdShow) int nCmdShow)
{ {
PROPSHEETPAGE psp[5]; PROPSHEETPAGEW psp[5];
PROPSHEETHEADER psh; PROPSHEETHEADERW psh;
DPRINT("ShowFullControlPanel()\n"); DPRINT("ShowFullControlPanel()\n");
psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwSize = sizeof(PROPSHEETHEADERW);
psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE | PSH_USEICONID | PSH_USECALLBACK; psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE | PSH_USEICONID | PSH_USECALLBACK;
psh.hwndParent = hwnd; psh.hwndParent = hwnd;
psh.hInstance = hInstance; psh.hInstance = hInstance;
psh.pszIcon = MAKEINTRESOURCEW(IDI_CPLICON); psh.pszIcon = MAKEINTRESOURCEW(IDI_CPLICON);
psh.pszCaption = MAKEINTRESOURCEW(IDS_CPLNAME); psh.pszCaption = MAKEINTRESOURCEW(IDS_CPLNAME);
psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE); psh.nPages = _countof(psp);
psh.nStartPage = 0; psh.nStartPage = 0;
psh.ppsp = psp; psh.ppsp = psp;
psh.pfnCallback = PropSheetProc; psh.pfnCallback = PropSheetProc;
InitPropSheetPage(&psp[0], IDD_VOLUME,VolumeDlgProc); InitPropSheetPage(&psp[0], IDD_VOLUME, VolumeDlgProc);
InitPropSheetPage(&psp[1], IDD_SOUNDS,SoundsDlgProc); InitPropSheetPage(&psp[1], IDD_SOUNDS, SoundsDlgProc);
InitPropSheetPage(&psp[2], IDD_AUDIO,AudioDlgProc); InitPropSheetPage(&psp[2], IDD_AUDIO, AudioDlgProc);
InitPropSheetPage(&psp[3], IDD_VOICE,VoiceDlgProc); InitPropSheetPage(&psp[3], IDD_VOICE, VoiceDlgProc);
InitPropSheetPage(&psp[4], IDD_HARDWARE,HardwareDlgProc); InitPropSheetPage(&psp[4], IDD_HARDWARE, HardwareDlgProc);
PropertySheet(&psh); PropertySheetW(&psh);
} }
BOOL WINAPI BOOL WINAPI
@ -850,7 +846,7 @@ DllMain(HINSTANCE hinstDLL,
LPVOID lpReserved) LPVOID lpReserved)
{ {
UNREFERENCED_PARAMETER(lpReserved); UNREFERENCED_PARAMETER(lpReserved);
switch(dwReason) switch (dwReason)
{ {
case DLL_PROCESS_ATTACH: case DLL_PROCESS_ATTACH:
hApplet = hinstDLL; hApplet = hinstDLL;

View file

@ -14,12 +14,14 @@
#include <winuser.h> #include <winuser.h>
#include <mmsystem.h> #include <mmsystem.h>
#include <cpl.h> #include <cpl.h>
#include <tchar.h>
#include <setupapi.h> #include <setupapi.h>
#include <stdlib.h> #include <stdlib.h>
#include <strsafe.h>
#include "resource.h" #include "resource.h"
#define CONST_STR_LEN(str) (_countof(str) - 1)
//typedef LONG (CALLBACK *APPLET_PROC)(VOID); //typedef LONG (CALLBACK *APPLET_PROC)(VOID);
typedef struct _APPLET typedef struct _APPLET
@ -34,8 +36,8 @@ extern HINSTANCE hApplet;
#define DRVM_MAPPER 0x2000 #define DRVM_MAPPER 0x2000
#define DRVM_MAPPER_PREFERRED_GET (DRVM_MAPPER+21) #define DRVM_MAPPER_PREFERRED_GET (DRVM_MAPPER + 21)
#define DRVM_MAPPER_PREFERRED_SET (DRVM_MAPPER+22) #define DRVM_MAPPER_PREFERRED_SET (DRVM_MAPPER + 22)
#define VOLUME_MIN 0 #define VOLUME_MIN 0
#define VOLUME_MAX 500 #define VOLUME_MAX 500
@ -46,7 +48,7 @@ extern HINSTANCE hApplet;
VOID VOID
InitPropSheetPage( InitPropSheetPage(
PROPSHEETPAGE *psp, PROPSHEETPAGEW *psp,
WORD idDlg, WORD idDlg,
DLGPROC DlgProc); DLGPROC DlgProc);

View file

@ -13,24 +13,23 @@
#include <commdlg.h> #include <commdlg.h>
#include <windowsx.h> #include <windowsx.h>
#include <strsafe.h>
#include <debug.h> #include <debug.h>
typedef struct _LABEL_MAP typedef struct _LABEL_MAP
{ {
TCHAR *szName; PWCHAR szName;
TCHAR *szDesc; PWCHAR szDesc;
TCHAR *szIcon; PWCHAR szIcon;
struct _APP_MAP *AppMap; struct _APP_MAP *AppMap;
struct _LABEL_MAP *Next; struct _LABEL_MAP *Next;
} LABEL_MAP, *PLABEL_MAP; } LABEL_MAP, *PLABEL_MAP;
typedef struct _APP_MAP typedef struct _APP_MAP
{ {
TCHAR szName[MAX_PATH]; WCHAR szName[MAX_PATH];
TCHAR szDesc[MAX_PATH]; WCHAR szDesc[MAX_PATH];
TCHAR szIcon[MAX_PATH]; WCHAR szIcon[MAX_PATH];
struct _APP_MAP *Next; struct _APP_MAP *Next;
PLABEL_MAP LabelMap; PLABEL_MAP LabelMap;
@ -40,20 +39,20 @@ typedef struct _LABEL_CONTEXT
{ {
PLABEL_MAP LabelMap; PLABEL_MAP LabelMap;
PAPP_MAP AppMap; PAPP_MAP AppMap;
TCHAR szValue[MAX_PATH]; WCHAR szValue[MAX_PATH];
struct _LABEL_CONTEXT *Next; struct _LABEL_CONTEXT *Next;
} LABEL_CONTEXT, *PLABEL_CONTEXT; } LABEL_CONTEXT, *PLABEL_CONTEXT;
typedef struct _SOUND_SCHEME_CONTEXT typedef struct _SOUND_SCHEME_CONTEXT
{ {
TCHAR szName[MAX_PATH]; WCHAR szName[MAX_PATH];
TCHAR szDesc[MAX_PATH]; WCHAR szDesc[MAX_PATH];
PLABEL_CONTEXT LabelContext; PLABEL_CONTEXT LabelContext;
} SOUND_SCHEME_CONTEXT, *PSOUND_SCHEME_CONTEXT; } SOUND_SCHEME_CONTEXT, *PSOUND_SCHEME_CONTEXT;
typedef struct _GLOBAL_DATA typedef struct _GLOBAL_DATA
{ {
TCHAR szDefault[MAX_PATH]; WCHAR szDefault[MAX_PATH];
HIMAGELIST hSoundsImageList; HIMAGELIST hSoundsImageList;
PLABEL_MAP pLabelMap; PLABEL_MAP pLabelMap;
PAPP_MAP pAppMap; PAPP_MAP pAppMap;
@ -64,7 +63,7 @@ typedef struct _GLOBAL_DATA
/* A filter string is a list separated by NULL and ends with double NULLs. */ /* A filter string is a list separated by NULL and ends with double NULLs. */
LPWSTR MakeFilter(LPWSTR psz) LPWSTR MakeFilter(LPWSTR psz)
{ {
WCHAR *pch; PWCHAR pch;
ASSERT(psz[0] != UNICODE_NULL && ASSERT(psz[0] != UNICODE_NULL &&
psz[wcslen(psz) - 1] == L'|'); psz[wcslen(psz) - 1] == L'|');
@ -79,7 +78,7 @@ LPWSTR MakeFilter(LPWSTR psz)
return psz; return psz;
} }
PLABEL_MAP FindLabel(PGLOBAL_DATA pGlobalData, PAPP_MAP pAppMap, TCHAR * szName) PLABEL_MAP FindLabel(PGLOBAL_DATA pGlobalData, PAPP_MAP pAppMap, PWCHAR szName)
{ {
PLABEL_MAP pMap = pGlobalData->pLabelMap; PLABEL_MAP pMap = pGlobalData->pLabelMap;
@ -87,7 +86,7 @@ PLABEL_MAP FindLabel(PGLOBAL_DATA pGlobalData, PAPP_MAP pAppMap, TCHAR * szName)
{ {
ASSERT(pMap); ASSERT(pMap);
ASSERT(pMap->szName); ASSERT(pMap->szName);
if (!_tcscmp(pMap->szName, szName)) if (!wcscmp(pMap->szName, szName))
return pMap; return pMap;
pMap = pMap->Next; pMap = pMap->Next;
@ -99,7 +98,7 @@ PLABEL_MAP FindLabel(PGLOBAL_DATA pGlobalData, PAPP_MAP pAppMap, TCHAR * szName)
{ {
ASSERT(pMap); ASSERT(pMap);
ASSERT(pMap->szName); ASSERT(pMap->szName);
if (!_tcscmp(pMap->szName, szName)) if (!wcscmp(pMap->szName, szName))
return pMap; return pMap;
pMap = pMap->Next; pMap = pMap->Next;
@ -109,7 +108,7 @@ PLABEL_MAP FindLabel(PGLOBAL_DATA pGlobalData, PAPP_MAP pAppMap, TCHAR * szName)
if (!pMap) if (!pMap)
return NULL; return NULL;
pMap->szName = pMap->szDesc = _tcsdup(szName); pMap->szName = pMap->szDesc = _wcsdup(szName);
if (!pMap->szName) if (!pMap->szName)
{ {
HeapFree(GetProcessHeap(), 0, pMap); HeapFree(GetProcessHeap(), 0, pMap);
@ -154,18 +153,28 @@ FreeLabelMap(PGLOBAL_DATA pGlobalData)
while (pGlobalData->pLabelMap) while (pGlobalData->pLabelMap)
{ {
pCurMap = pGlobalData->pLabelMap->Next; pCurMap = pGlobalData->pLabelMap->Next;
/* Prevent double freeing (for "FindLabel") */
if (pGlobalData->pLabelMap->szName != pGlobalData->pLabelMap->szDesc)
{
free(pGlobalData->pLabelMap->szName);
}
free(pGlobalData->pLabelMap->szDesc);
free(pGlobalData->pLabelMap->szIcon);
HeapFree(GetProcessHeap(), 0, pGlobalData->pLabelMap); HeapFree(GetProcessHeap(), 0, pGlobalData->pLabelMap);
pGlobalData->pLabelMap = pCurMap; pGlobalData->pLabelMap = pCurMap;
} }
} }
PAPP_MAP FindApp(PGLOBAL_DATA pGlobalData, TCHAR *szName) PAPP_MAP FindApp(PGLOBAL_DATA pGlobalData, PWCHAR szName)
{ {
PAPP_MAP pMap = pGlobalData->pAppMap; PAPP_MAP pMap = pGlobalData->pAppMap;
while (pMap) while (pMap)
{ {
if (!_tcscmp(pMap->szName, szName)) if (!wcscmp(pMap->szName, szName))
return pMap; return pMap;
pMap = pMap->Next; pMap = pMap->Next;
@ -188,7 +197,7 @@ FreeAppMap(PGLOBAL_DATA pGlobalData)
} }
} }
PLABEL_CONTEXT FindLabelContext(PGLOBAL_DATA pGlobalData, PSOUND_SCHEME_CONTEXT pSoundScheme, TCHAR * AppName, TCHAR * LabelName) PLABEL_CONTEXT FindLabelContext(PGLOBAL_DATA pGlobalData, PSOUND_SCHEME_CONTEXT pSoundScheme, PWCHAR AppName, PWCHAR LabelName)
{ {
PLABEL_CONTEXT pLabelContext; PLABEL_CONTEXT pLabelContext;
@ -199,7 +208,7 @@ PLABEL_CONTEXT FindLabelContext(PGLOBAL_DATA pGlobalData, PSOUND_SCHEME_CONTEXT
ASSERT(pLabelContext->AppMap); ASSERT(pLabelContext->AppMap);
ASSERT(pLabelContext->LabelMap); ASSERT(pLabelContext->LabelMap);
if (!_tcsicmp(pLabelContext->AppMap->szName, AppName) && !_tcsicmp(pLabelContext->LabelMap->szName, LabelName)) if (!_wcsicmp(pLabelContext->AppMap->szName, AppName) && !_wcsicmp(pLabelContext->LabelMap->szName, LabelName))
{ {
return pLabelContext; return pLabelContext;
} }
@ -214,7 +223,7 @@ PLABEL_CONTEXT FindLabelContext(PGLOBAL_DATA pGlobalData, PSOUND_SCHEME_CONTEXT
pLabelContext->LabelMap = FindLabel(pGlobalData, pLabelContext->AppMap, LabelName); pLabelContext->LabelMap = FindLabel(pGlobalData, pLabelContext->AppMap, LabelName);
ASSERT(pLabelContext->AppMap); ASSERT(pLabelContext->AppMap);
ASSERT(pLabelContext->LabelMap); ASSERT(pLabelContext->LabelMap);
pLabelContext->szValue[0] = _T('\0'); pLabelContext->szValue[0] = UNICODE_NULL;
pLabelContext->Next = pSoundScheme->LabelContext; pLabelContext->Next = pSoundScheme->LabelContext;
pSoundScheme->LabelContext = pLabelContext; pSoundScheme->LabelContext = pLabelContext;
@ -223,15 +232,15 @@ PLABEL_CONTEXT FindLabelContext(PGLOBAL_DATA pGlobalData, PSOUND_SCHEME_CONTEXT
BOOL BOOL
LoadEventLabel(PGLOBAL_DATA pGlobalData, HKEY hKey, TCHAR * szSubKey) LoadEventLabel(PGLOBAL_DATA pGlobalData, HKEY hKey, PWCHAR szSubKey)
{ {
HKEY hSubKey; HKEY hSubKey;
DWORD cbValue; DWORD cbValue;
TCHAR szDesc[MAX_PATH]; WCHAR szDesc[MAX_PATH];
TCHAR szData[MAX_PATH]; WCHAR szData[MAX_PATH];
PLABEL_MAP pMap; PLABEL_MAP pMap;
if (RegOpenKeyEx(hKey, if (RegOpenKeyExW(hKey,
szSubKey, szSubKey,
0, 0,
KEY_READ, KEY_READ,
@ -241,7 +250,7 @@ LoadEventLabel(PGLOBAL_DATA pGlobalData, HKEY hKey, TCHAR * szSubKey)
} }
cbValue = sizeof(szDesc); cbValue = sizeof(szDesc);
if (RegQueryValueEx(hSubKey, if (RegQueryValueExW(hSubKey,
NULL, NULL,
NULL, NULL,
NULL, NULL,
@ -253,8 +262,8 @@ LoadEventLabel(PGLOBAL_DATA pGlobalData, HKEY hKey, TCHAR * szSubKey)
} }
cbValue = sizeof(szData); cbValue = sizeof(szData);
if (RegQueryValueEx(hSubKey, if (RegQueryValueExW(hSubKey,
_T("DispFileName"), L"DispFileName",
NULL, NULL,
NULL, NULL,
(LPBYTE)szData, (LPBYTE)szData,
@ -270,9 +279,9 @@ LoadEventLabel(PGLOBAL_DATA pGlobalData, HKEY hKey, TCHAR * szSubKey)
return FALSE; return FALSE;
} }
pMap->szName = _tcsdup(szSubKey); pMap->szName = _wcsdup(szSubKey);
pMap->szDesc = _tcsdup(szDesc); pMap->szDesc = _wcsdup(szDesc);
pMap->szIcon = _tcsdup(szData); pMap->szIcon = _wcsdup(szData);
if (pGlobalData->pLabelMap) if (pGlobalData->pLabelMap)
{ {
@ -293,12 +302,12 @@ LoadEventLabels(PGLOBAL_DATA pGlobalData)
{ {
HKEY hSubKey; HKEY hSubKey;
DWORD dwCurKey; DWORD dwCurKey;
TCHAR szName[MAX_PATH]; WCHAR szName[MAX_PATH];
DWORD dwName; DWORD dwName;
DWORD dwResult; DWORD dwResult;
DWORD dwCount; DWORD dwCount;
if (RegOpenKeyEx(HKEY_CURRENT_USER, if (RegOpenKeyExW(HKEY_CURRENT_USER,
_T("AppEvents\\EventLabels"), L"AppEvents\\EventLabels",
0, 0,
KEY_READ, KEY_READ,
&hSubKey) != ERROR_SUCCESS) &hSubKey) != ERROR_SUCCESS)
@ -311,7 +320,7 @@ LoadEventLabels(PGLOBAL_DATA pGlobalData)
do do
{ {
dwName = _countof(szName); dwName = _countof(szName);
dwResult = RegEnumKeyEx(hSubKey, dwResult = RegEnumKeyExW(hSubKey,
dwCurKey, dwCurKey,
szName, szName,
&dwName, &dwName,
@ -337,15 +346,15 @@ LoadEventLabels(PGLOBAL_DATA pGlobalData)
BOOL BOOL
AddSoundProfile(HWND hwndDlg, HKEY hKey, TCHAR * szSubKey, BOOL SetDefault) AddSoundProfile(HWND hwndDlg, HKEY hKey, PWCHAR szSubKey, BOOL SetDefault)
{ {
HKEY hSubKey; HKEY hSubKey;
TCHAR szValue[MAX_PATH]; WCHAR szValue[MAX_PATH];
DWORD cbValue, dwResult; DWORD cbValue, dwResult;
LRESULT lResult; LRESULT lResult;
PSOUND_SCHEME_CONTEXT pScheme; PSOUND_SCHEME_CONTEXT pScheme;
if (RegOpenKeyEx(hKey, if (RegOpenKeyExW(hKey,
szSubKey, szSubKey,
0, 0,
KEY_READ, KEY_READ,
@ -355,7 +364,7 @@ AddSoundProfile(HWND hwndDlg, HKEY hKey, TCHAR * szSubKey, BOOL SetDefault)
} }
cbValue = sizeof(szValue); cbValue = sizeof(szValue);
dwResult = RegQueryValueEx(hSubKey, dwResult = RegQueryValueExW(hSubKey,
NULL, NULL,
NULL, NULL,
NULL, NULL,
@ -380,8 +389,8 @@ AddSoundProfile(HWND hwndDlg, HKEY hKey, TCHAR * szSubKey, BOOL SetDefault)
return FALSE; return FALSE;
} }
StringCchCopy(pScheme->szDesc, MAX_PATH, szValue); StringCchCopyW(pScheme->szDesc, _countof(pScheme->szDesc), szValue);
StringCchCopy(pScheme->szName, MAX_PATH, szSubKey); StringCchCopyW(pScheme->szName, _countof(pScheme->szName), szSubKey);
/* Associate the value with the item in the combobox */ /* Associate the value with the item in the combobox */
ComboBox_SetItemData(GetDlgItem(hwndDlg, IDC_SOUND_SCHEME), lResult, pScheme); ComboBox_SetItemData(GetDlgItem(hwndDlg, IDC_SOUND_SCHEME), lResult, pScheme);
@ -402,10 +411,10 @@ EnumerateSoundProfiles(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey)
HKEY hSubKey; HKEY hSubKey;
DWORD dwName, dwCurKey, dwResult, dwNumSchemes; DWORD dwName, dwCurKey, dwResult, dwNumSchemes;
DWORD cbDefault; DWORD cbDefault;
TCHAR szName[MAX_PATH]; WCHAR szName[MAX_PATH];
cbDefault = sizeof(pGlobalData->szDefault); cbDefault = sizeof(pGlobalData->szDefault);
if (RegQueryValueEx(hKey, if (RegQueryValueExW(hKey,
NULL, NULL,
NULL, NULL,
NULL, NULL,
@ -415,8 +424,8 @@ EnumerateSoundProfiles(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey)
return FALSE; return FALSE;
} }
if (RegOpenKeyEx(hKey, if (RegOpenKeyExW(hKey,
_T("Names"), L"Names",
0, 0,
KEY_READ, KEY_READ,
&hSubKey) != ERROR_SUCCESS) &hSubKey) != ERROR_SUCCESS)
@ -429,7 +438,7 @@ EnumerateSoundProfiles(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey)
do do
{ {
dwName = _countof(szName); dwName = _countof(szName);
dwResult = RegEnumKeyEx(hSubKey, dwResult = RegEnumKeyExW(hSubKey,
dwCurKey, dwCurKey,
szName, szName,
&dwName, &dwName,
@ -440,7 +449,7 @@ EnumerateSoundProfiles(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey)
if (dwResult == ERROR_SUCCESS) if (dwResult == ERROR_SUCCESS)
{ {
if (AddSoundProfile(hwndDlg, hSubKey, szName, (!_tcsicmp(szName, pGlobalData->szDefault)))) if (AddSoundProfile(hwndDlg, hSubKey, szName, (!_wcsicmp(szName, pGlobalData->szDefault))))
{ {
dwNumSchemes++; dwNumSchemes++;
} }
@ -454,7 +463,7 @@ EnumerateSoundProfiles(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey)
} }
PSOUND_SCHEME_CONTEXT FindSoundProfile(HWND hwndDlg, TCHAR * szName) PSOUND_SCHEME_CONTEXT FindSoundProfile(HWND hwndDlg, PWCHAR szName)
{ {
LRESULT lCount, lIndex, lResult; LRESULT lCount, lIndex, lResult;
PSOUND_SCHEME_CONTEXT pScheme; PSOUND_SCHEME_CONTEXT pScheme;
@ -476,7 +485,7 @@ PSOUND_SCHEME_CONTEXT FindSoundProfile(HWND hwndDlg, TCHAR * szName)
} }
pScheme = (PSOUND_SCHEME_CONTEXT)lResult; pScheme = (PSOUND_SCHEME_CONTEXT)lResult;
if (!_tcsicmp(pScheme->szName, szName)) if (!_wcsicmp(pScheme->szName, szName))
{ {
return pScheme; return pScheme;
} }
@ -520,22 +529,20 @@ FreeSoundProfiles(HWND hwndDlg)
} }
BOOL BOOL
ImportSoundLabel(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, TCHAR * szProfile, TCHAR * szLabelName, TCHAR * szAppName, PAPP_MAP AppMap, PLABEL_MAP LabelMap) ImportSoundLabel(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, PWCHAR szProfile, PWCHAR szLabelName, PWCHAR szAppName, PAPP_MAP AppMap, PLABEL_MAP LabelMap)
{ {
HKEY hSubKey; HKEY hSubKey;
TCHAR szValue[MAX_PATH]; WCHAR szValue[MAX_PATH];
TCHAR szBuffer[MAX_PATH]; WCHAR szBuffer[MAX_PATH];
DWORD cbValue, cchLength; DWORD cbValue, cchLength;
PSOUND_SCHEME_CONTEXT pScheme; PSOUND_SCHEME_CONTEXT pScheme;
PLABEL_CONTEXT pLabelContext; PLABEL_CONTEXT pLabelContext;
BOOL bCurrentProfile, bActiveProfile; BOOL bCurrentProfile, bActiveProfile;
//MessageBox(hwndDlg, szProfile, szLabelName, MB_OK); bCurrentProfile = !_wcsicmp(szProfile, L".Current");
bActiveProfile = !_wcsicmp(szProfile, pGlobalData->szDefault);
bCurrentProfile = !_tcsicmp(szProfile, _T(".Current")); if (RegOpenKeyExW(hKey,
bActiveProfile = !_tcsicmp(szProfile, pGlobalData->szDefault);
if (RegOpenKeyEx(hKey,
szProfile, szProfile,
0, 0,
KEY_READ, KEY_READ,
@ -545,7 +552,7 @@ ImportSoundLabel(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, TCHAR * szPr
} }
cbValue = sizeof(szValue); cbValue = sizeof(szValue);
if (RegQueryValueEx(hSubKey, if (RegQueryValueExW(hSubKey,
NULL, NULL,
NULL, NULL,
NULL, NULL,
@ -562,12 +569,11 @@ ImportSoundLabel(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, TCHAR * szPr
if (!pScheme) if (!pScheme)
{ {
//MessageBox(hwndDlg, szProfile, _T("no profile!!"), MB_OK);
return FALSE; return FALSE;
} }
pLabelContext = FindLabelContext(pGlobalData, pScheme, AppMap->szName, LabelMap->szName); pLabelContext = FindLabelContext(pGlobalData, pScheme, AppMap->szName, LabelMap->szName);
cchLength = ExpandEnvironmentStrings(szValue, szBuffer, _countof(szBuffer)); cchLength = ExpandEnvironmentStringsW(szValue, szBuffer, _countof(szBuffer));
if (cchLength == 0 || cchLength > _countof(szBuffer)) if (cchLength == 0 || cchLength > _countof(szBuffer))
{ {
/* fixme */ /* fixme */
@ -575,26 +581,26 @@ ImportSoundLabel(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, TCHAR * szPr
} }
if (bCurrentProfile) if (bCurrentProfile)
_tcscpy(pLabelContext->szValue, szBuffer); StringCchCopyW(pLabelContext->szValue, _countof(pLabelContext->szValue), szBuffer);
else if (!bActiveProfile) else if (!bActiveProfile)
_tcscpy(pLabelContext->szValue, szBuffer); StringCchCopyW(pLabelContext->szValue, _countof(pLabelContext->szValue), szBuffer);
return TRUE; return TRUE;
} }
DWORD DWORD
ImportSoundEntry(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, TCHAR * szLabelName, TCHAR * szAppName, PAPP_MAP pAppMap) ImportSoundEntry(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, PWCHAR szLabelName, PWCHAR szAppName, PAPP_MAP pAppMap)
{ {
HKEY hSubKey; HKEY hSubKey;
DWORD dwNumProfiles; DWORD dwNumProfiles;
DWORD dwCurKey; DWORD dwCurKey;
DWORD dwResult; DWORD dwResult;
DWORD dwProfile; DWORD dwProfile;
TCHAR szProfile[MAX_PATH]; WCHAR szProfile[MAX_PATH];
PLABEL_MAP pLabel; PLABEL_MAP pLabel;
if (RegOpenKeyEx(hKey, if (RegOpenKeyExW(hKey,
szLabelName, szLabelName,
0, 0,
KEY_READ, KEY_READ,
@ -616,7 +622,7 @@ ImportSoundEntry(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, TCHAR * szLa
do do
{ {
dwProfile = _countof(szProfile); dwProfile = _countof(szProfile);
dwResult = RegEnumKeyEx(hSubKey, dwResult = RegEnumKeyExW(hSubKey,
dwCurKey, dwCurKey,
szProfile, szProfile,
&dwProfile, &dwProfile,
@ -643,26 +649,24 @@ ImportSoundEntry(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, TCHAR * szLa
DWORD DWORD
ImportAppProfile(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, TCHAR * szAppName) ImportAppProfile(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, PWCHAR szAppName)
{ {
HKEY hSubKey; HKEY hSubKey;
TCHAR szDefault[MAX_PATH]; WCHAR szDefault[MAX_PATH];
DWORD cbValue; DWORD cbValue;
DWORD dwCurKey; DWORD dwCurKey;
DWORD dwResult; DWORD dwResult;
DWORD dwNumEntry; DWORD dwNumEntry;
DWORD dwName; DWORD dwName;
TCHAR szName[MAX_PATH]; WCHAR szName[MAX_PATH];
TCHAR szIcon[MAX_PATH]; WCHAR szIcon[MAX_PATH];
PAPP_MAP AppMap; PAPP_MAP AppMap;
//MessageBox(hwndDlg, szAppName, _T("Importing...\n"), MB_OK);
AppMap = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(APP_MAP)); AppMap = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(APP_MAP));
if (!AppMap) if (!AppMap)
return 0; return 0;
if (RegOpenKeyEx(hKey, if (RegOpenKeyExW(hKey,
szAppName, szAppName,
0, 0,
KEY_READ, KEY_READ,
@ -673,7 +677,7 @@ ImportAppProfile(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, TCHAR * szAp
} }
cbValue = sizeof(szDefault); cbValue = sizeof(szDefault);
if (RegQueryValueEx(hSubKey, if (RegQueryValueExW(hSubKey,
NULL, NULL,
NULL, NULL,
NULL, NULL,
@ -686,20 +690,20 @@ ImportAppProfile(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, TCHAR * szAp
} }
cbValue = sizeof(szIcon); cbValue = sizeof(szIcon);
if (RegQueryValueEx(hSubKey, if (RegQueryValueExW(hSubKey,
_T("DispFileName"), L"DispFileName",
NULL, NULL,
NULL, NULL,
(LPBYTE)szIcon, (LPBYTE)szIcon,
&cbValue) != ERROR_SUCCESS) &cbValue) != ERROR_SUCCESS)
{ {
szIcon[0] = _T('\0'); szIcon[0] = UNICODE_NULL;
} }
/* initialize app map */ /* initialize app map */
_tcscpy(AppMap->szName, szAppName); StringCchCopyW(AppMap->szName, _countof(AppMap->szName), szAppName);
_tcscpy(AppMap->szDesc, szDefault); StringCchCopyW(AppMap->szDesc, _countof(AppMap->szDesc), szDefault);
_tcscpy(AppMap->szIcon, szIcon); StringCchCopyW(AppMap->szIcon, _countof(AppMap->szIcon), szIcon);
AppMap->Next = pGlobalData->pAppMap; AppMap->Next = pGlobalData->pAppMap;
pGlobalData->pAppMap = AppMap; pGlobalData->pAppMap = AppMap;
@ -710,7 +714,7 @@ ImportAppProfile(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, TCHAR * szAp
do do
{ {
dwName = _countof(szName); dwName = _countof(szName);
dwResult = RegEnumKeyEx(hSubKey, dwResult = RegEnumKeyExW(hSubKey,
dwCurKey, dwCurKey,
szName, szName,
&dwName, &dwName,
@ -739,11 +743,11 @@ ImportSoundProfiles(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey)
DWORD dwCurKey; DWORD dwCurKey;
DWORD dwResult; DWORD dwResult;
DWORD dwNumApps; DWORD dwNumApps;
TCHAR szName[MAX_PATH]; WCHAR szName[MAX_PATH];
HKEY hSubKey; HKEY hSubKey;
if (RegOpenKeyEx(hKey, if (RegOpenKeyExW(hKey,
_T("Apps"), L"Apps",
0, 0,
KEY_READ, KEY_READ,
&hSubKey) != ERROR_SUCCESS) &hSubKey) != ERROR_SUCCESS)
@ -755,7 +759,7 @@ ImportSoundProfiles(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey)
dwCurKey = 0; dwCurKey = 0;
do do
{ {
dwResult = RegEnumKey(hSubKey, dwResult = RegEnumKeyW(hSubKey,
dwCurKey, dwCurKey,
szName, szName,
_countof(szName)); _countof(szName));
@ -782,8 +786,8 @@ LoadSoundProfiles(PGLOBAL_DATA pGlobalData, HWND hwndDlg)
HKEY hSubKey; HKEY hSubKey;
DWORD dwNumSchemes; DWORD dwNumSchemes;
if (RegOpenKeyEx(HKEY_CURRENT_USER, if (RegOpenKeyExW(HKEY_CURRENT_USER,
_T("AppEvents\\Schemes"), L"AppEvents\\Schemes",
0, 0,
KEY_READ, KEY_READ,
&hSubKey) != ERROR_SUCCESS) &hSubKey) != ERROR_SUCCESS)
@ -796,7 +800,6 @@ LoadSoundProfiles(PGLOBAL_DATA pGlobalData, HWND hwndDlg)
if (dwNumSchemes) if (dwNumSchemes)
{ {
//MessageBox(hwndDlg, _T("importing sound profiles..."), NULL, MB_OK);
ImportSoundProfiles(pGlobalData, hwndDlg, hSubKey); ImportSoundProfiles(pGlobalData, hwndDlg, hSubKey);
} }
@ -808,34 +811,30 @@ LoadSoundProfiles(PGLOBAL_DATA pGlobalData, HWND hwndDlg)
BOOL BOOL
LoadSoundFiles(HWND hwndDlg) LoadSoundFiles(HWND hwndDlg)
{ {
TCHAR szList[256]; WCHAR szList[256];
WCHAR szPath[MAX_PATH]; WCHAR szPath[MAX_PATH];
WCHAR * ptr; PWCHAR ptr;
WIN32_FIND_DATAW FileData; WIN32_FIND_DATAW FileData;
HANDLE hFile; HANDLE hFile;
LRESULT lResult; LRESULT lResult;
UINT length; UINT length;
/* Add no sound listview item */ /* Add no sound listview item */
if (LoadString(hApplet, IDS_NO_SOUND, szList, _countof(szList))) if (LoadStringW(hApplet, IDS_NO_SOUND, szList, _countof(szList)))
{ {
szList[_countof(szList) - 1] = TEXT('\0'); szList[_countof(szList) - 1] = UNICODE_NULL;
ComboBox_AddString(GetDlgItem(hwndDlg, IDC_SOUND_LIST), szList); ComboBox_AddString(GetDlgItem(hwndDlg, IDC_SOUND_LIST), szList);
} }
/* Load sound files */ /* Load sound files */
length = GetWindowsDirectoryW(szPath, MAX_PATH); length = GetWindowsDirectoryW(szPath, _countof(szPath));
if (length == 0 || length >= MAX_PATH - 9) if (length == 0 || length >= _countof(szPath) - CONST_STR_LEN(L"\\media\\*"))
{ {
return FALSE; return FALSE;
} }
if (szPath[length-1] != L'\\')
{ //PathCchAppend(szPath, _countof(szPath), L"media\\*");
szPath[length] = L'\\'; StringCchCatW(szPath, _countof(szPath), L"\\media\\*");
length++;
}
wcscpy(&szPath[length], L"media\\*");
length += 7;
hFile = FindFirstFileW(szPath, &FileData); hFile = FindFirstFileW(szPath, &FileData);
if (hFile == INVALID_HANDLE_VALUE) if (hFile == INVALID_HANDLE_VALUE)
@ -857,10 +856,12 @@ LoadSoundFiles(HWND hwndDlg)
{ {
ptr = FileData.cFileName; ptr = FileData.cFileName;
} }
lResult = SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_ADDSTRING, (WPARAM)0, (LPARAM)ptr); lResult = SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_ADDSTRING, 0, (LPARAM)ptr);
if (lResult != CB_ERR) if (lResult != CB_ERR)
{ {
wcscpy(&szPath[length-1], FileData.cFileName); StringCchCopyW(szPath + (length + CONST_STR_LEN(L"\\media\\")),
_countof(szPath) - (length + CONST_STR_LEN(L"\\media\\")),
FileData.cFileName);
SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)_wcsdup(szPath)); SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)_wcsdup(szPath));
} }
} while (FindNextFileW(hFile, &FileData) != 0); } while (FindNextFileW(hFile, &FileData) != 0);
@ -869,6 +870,31 @@ LoadSoundFiles(HWND hwndDlg)
return TRUE; return TRUE;
} }
static
VOID
FreeSoundFiles(HWND hwndDlg)
{
LRESULT lCount, lIndex, lResult;
PWCHAR pSoundPath;
HWND hwndComboBox;
hwndComboBox = GetDlgItem(hwndDlg, IDC_SOUND_LIST);
lCount = ComboBox_GetCount(hwndComboBox);
if (lCount == CB_ERR)
return;
for (lIndex = 0; lIndex < lCount; lIndex++)
{
lResult = ComboBox_GetItemData(hwndComboBox, lIndex);
if (lResult == CB_ERR)
{
continue;
}
pSoundPath = (PWCHAR)lResult;
free(pSoundPath);
}
}
BOOL BOOL
ShowSoundScheme(PGLOBAL_DATA pGlobalData, HWND hwndDlg) ShowSoundScheme(PGLOBAL_DATA pGlobalData, HWND hwndDlg)
@ -879,7 +905,7 @@ ShowSoundScheme(PGLOBAL_DATA pGlobalData, HWND hwndDlg)
PLABEL_MAP pLabelMap; PLABEL_MAP pLabelMap;
PLABEL_CONTEXT pLabelContext; PLABEL_CONTEXT pLabelContext;
HWND hDlgCtrl, hList; HWND hDlgCtrl, hList;
TVINSERTSTRUCT tvItem; TVINSERTSTRUCTW tvItem;
HTREEITEM hTreeItem; HTREEITEM hTreeItem;
hDlgCtrl = GetDlgItem(hwndDlg, IDC_SOUND_SCHEME); hDlgCtrl = GetDlgItem(hwndDlg, IDC_SOUND_SCHEME);
@ -890,20 +916,20 @@ ShowSoundScheme(PGLOBAL_DATA pGlobalData, HWND hwndDlg)
TreeView_SetImageList(hList, pGlobalData->hSoundsImageList, TVSIL_NORMAL); TreeView_SetImageList(hList, pGlobalData->hSoundsImageList, TVSIL_NORMAL);
} }
lIndex = SendMessage(hDlgCtrl, CB_GETCURSEL, (WPARAM)0, (LPARAM)0); lIndex = SendMessageW(hDlgCtrl, CB_GETCURSEL, 0, 0);
if (lIndex == CB_ERR) if (lIndex == CB_ERR)
{ {
return FALSE; return FALSE;
} }
lIndex = SendMessage(hDlgCtrl, CB_GETITEMDATA, (WPARAM)lIndex, (LPARAM)0); lIndex = SendMessageW(hDlgCtrl, CB_GETITEMDATA, (WPARAM)lIndex, 0);
if (lIndex == CB_ERR) if (lIndex == CB_ERR)
{ {
return FALSE; return FALSE;
} }
pScheme = (PSOUND_SCHEME_CONTEXT)lIndex; pScheme = (PSOUND_SCHEME_CONTEXT)lIndex;
_tcscpy(pGlobalData->szDefault, pScheme->szName); StringCchCopyW(pGlobalData->szDefault, _countof(pGlobalData->szDefault), pScheme->szName);
pAppMap = pGlobalData->pAppMap; pAppMap = pGlobalData->pAppMap;
while (pAppMap) while (pAppMap)
@ -935,7 +961,7 @@ ShowSoundScheme(PGLOBAL_DATA pGlobalData, HWND hwndDlg)
tvItem.item.state = TVIS_EXPANDED; tvItem.item.state = TVIS_EXPANDED;
tvItem.item.stateMask = TVIS_EXPANDED; tvItem.item.stateMask = TVIS_EXPANDED;
tvItem.item.pszText = pLabelMap->szDesc; tvItem.item.pszText = pLabelMap->szDesc;
if (pLabelContext->szValue && _tcslen(pLabelContext->szValue) > 0) if (pLabelContext->szValue && wcslen(pLabelContext->szValue) > 0)
{ {
tvItem.item.iImage = IMAGE_SOUND_ASSIGNED; tvItem.item.iImage = IMAGE_SOUND_ASSIGNED;
tvItem.item.iSelectedImage = IMAGE_SOUND_ASSIGNED; tvItem.item.iSelectedImage = IMAGE_SOUND_ASSIGNED;
@ -961,29 +987,30 @@ BOOL
ApplyChanges(HWND hwndDlg) ApplyChanges(HWND hwndDlg)
{ {
HKEY hKey, hSubKey; HKEY hKey, hSubKey;
DWORD dwType;
LRESULT lIndex; LRESULT lIndex;
PSOUND_SCHEME_CONTEXT pScheme; PSOUND_SCHEME_CONTEXT pScheme;
HWND hDlgCtrl; HWND hDlgCtrl;
PLABEL_CONTEXT pLabelContext; PLABEL_CONTEXT pLabelContext;
TCHAR Buffer[100]; WCHAR Buffer[100];
hDlgCtrl = GetDlgItem(hwndDlg, IDC_SOUND_SCHEME); hDlgCtrl = GetDlgItem(hwndDlg, IDC_SOUND_SCHEME);
lIndex = SendMessage(hDlgCtrl, CB_GETCURSEL, (WPARAM)0, (LPARAM)0); lIndex = SendMessageW(hDlgCtrl, CB_GETCURSEL, 0, 0);
if (lIndex == CB_ERR) if (lIndex == CB_ERR)
{ {
return FALSE; return FALSE;
} }
lIndex = SendMessage(hDlgCtrl, CB_GETITEMDATA, (WPARAM)lIndex, (LPARAM)0); lIndex = SendMessageW(hDlgCtrl, CB_GETITEMDATA, (WPARAM)lIndex, 0);
if (lIndex == CB_ERR) if (lIndex == CB_ERR)
{ {
return FALSE; return FALSE;
} }
pScheme = (PSOUND_SCHEME_CONTEXT)lIndex; pScheme = (PSOUND_SCHEME_CONTEXT)lIndex;
if (RegOpenKeyEx(HKEY_CURRENT_USER, if (RegOpenKeyExW(HKEY_CURRENT_USER,
_T("AppEvents\\Schemes"), L"AppEvents\\Schemes",
0, 0,
KEY_WRITE, KEY_WRITE,
&hKey) != ERROR_SUCCESS) &hKey) != ERROR_SUCCESS)
@ -991,11 +1018,11 @@ ApplyChanges(HWND hwndDlg)
return FALSE; return FALSE;
} }
RegSetValueEx(hKey, NULL, 0, REG_SZ, (LPBYTE)pScheme->szName, (_tcslen(pScheme->szName) +1) * sizeof(TCHAR)); RegSetValueExW(hKey, NULL, 0, REG_SZ, (LPBYTE)pScheme->szName, (wcslen(pScheme->szName) + 1) * sizeof(WCHAR));
RegCloseKey(hKey); RegCloseKey(hKey);
if (RegOpenKeyEx(HKEY_CURRENT_USER, if (RegOpenKeyExW(HKEY_CURRENT_USER,
_T("AppEvents\\Schemes\\Apps"), L"AppEvents\\Schemes\\Apps",
0, 0,
KEY_WRITE, KEY_WRITE,
&hKey) != ERROR_SUCCESS) &hKey) != ERROR_SUCCESS)
@ -1007,11 +1034,12 @@ ApplyChanges(HWND hwndDlg)
while (pLabelContext) while (pLabelContext)
{ {
_stprintf(Buffer, _T("%s\\%s\\.Current"), pLabelContext->AppMap->szName, pLabelContext->LabelMap->szName); StringCchPrintfW(Buffer, _countof(Buffer), L"%s\\%s\\.Current", pLabelContext->AppMap->szName, pLabelContext->LabelMap->szName);
if (RegOpenKeyEx(hKey, Buffer, 0, KEY_WRITE, &hSubKey) == ERROR_SUCCESS) if (RegOpenKeyExW(hKey, Buffer, 0, KEY_WRITE, &hSubKey) == ERROR_SUCCESS)
{ {
RegSetValueEx(hSubKey, NULL, 0, REG_EXPAND_SZ, (LPBYTE)pLabelContext->szValue, (_tcslen(pLabelContext->szValue) +1) * sizeof(TCHAR)); dwType = (wcschr(pLabelContext->szValue, L'%') ? REG_EXPAND_SZ : REG_SZ);
RegSetValueExW(hSubKey, NULL, 0, dwType, (LPBYTE)pLabelContext->szValue, (wcslen(pLabelContext->szValue) + 1) * sizeof(WCHAR));
RegCloseKey(hSubKey); RegCloseKey(hSubKey);
} }
@ -1019,7 +1047,7 @@ ApplyChanges(HWND hwndDlg)
} }
RegCloseKey(hKey); RegCloseKey(hKey);
SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, (LONG_PTR)PSNRET_NOERROR); SetWindowLongPtrW(hwndDlg, DWLP_MSGRESULT, (LONG_PTR)PSNRET_NOERROR);
return TRUE; return TRUE;
} }
@ -1101,20 +1129,20 @@ SoundsDlgProc(HWND hwndDlg,
LPWSTR pFileName; LPWSTR pFileName;
LRESULT lResult; LRESULT lResult;
pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); pGlobalData = (PGLOBAL_DATA)GetWindowLongPtrW(hwndDlg, DWLP_USER);
switch (uMsg) switch (uMsg)
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
{ {
pGlobalData = (PGLOBAL_DATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBAL_DATA)); pGlobalData = (PGLOBAL_DATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBAL_DATA));
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); SetWindowLongPtrW(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
pGlobalData->NumWavOut = waveOutGetNumDevs(); pGlobalData->NumWavOut = waveOutGetNumDevs();
SendMessage(GetDlgItem(hwndDlg, IDC_PLAY_SOUND), SendMessageW(GetDlgItem(hwndDlg, IDC_PLAY_SOUND),
BM_SETIMAGE,(WPARAM)IMAGE_ICON, BM_SETIMAGE, (WPARAM)IMAGE_ICON,
(LPARAM)(HANDLE)LoadIcon(hApplet, MAKEINTRESOURCE(IDI_PLAY_ICON))); (LPARAM)(HANDLE)LoadIconW(hApplet, MAKEINTRESOURCEW(IDI_PLAY_ICON)));
pGlobalData->hSoundsImageList = InitImageList(IDI_SOUND_SECTION, pGlobalData->hSoundsImageList = InitImageList(IDI_SOUND_SECTION,
IDI_SOUND_ASSIGNED, IDI_SOUND_ASSIGNED,
@ -1142,7 +1170,7 @@ SoundsDlgProc(HWND hwndDlg,
ofn.lStructSize = sizeof(ofn); ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwndDlg; ofn.hwndOwner = hwndDlg;
ofn.lpstrFile = filename; ofn.lpstrFile = filename;
ofn.lpstrFile[0] = L'\0'; ofn.lpstrFile[0] = UNICODE_NULL;
ofn.nMaxFile = _countof(filename); ofn.nMaxFile = _countof(filename);
LoadStringW(hApplet, IDS_WAVE_FILES_FILTER, szFilter, _countof(szFilter)); LoadStringW(hApplet, IDS_WAVE_FILES_FILTER, szFilter, _countof(szFilter));
ofn.lpstrFilter = MakeFilter(szFilter); ofn.lpstrFilter = MakeFilter(szFilter);
@ -1152,7 +1180,7 @@ SoundsDlgProc(HWND hwndDlg,
ofn.lpstrInitialDir = L"%SystemRoot%\\Media"; ofn.lpstrInitialDir = L"%SystemRoot%\\Media";
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
if (GetOpenFileNameW(&ofn) != FALSE) if (GetOpenFileNameW(&ofn))
{ {
// FIXME search if list already contains that sound // FIXME search if list already contains that sound
@ -1162,12 +1190,12 @@ SoundsDlgProc(HWND hwndDlg,
pFileName++; pFileName++;
// add to list // add to list
lResult = SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_ADDSTRING, (WPARAM)0, (LPARAM)pFileName); lResult = SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_ADDSTRING, 0, (LPARAM)pFileName);
if (lResult != CB_ERR) if (lResult != CB_ERR)
{ {
// add path and select item // add path and select item
SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)_wcsdup(filename)); SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)_wcsdup(filename));
SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_SETCURSEL, (WPARAM)lResult, (LPARAM)0); SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_SETCURSEL, (WPARAM)lResult, 0);
} }
} }
break; break;
@ -1184,7 +1212,7 @@ SoundsDlgProc(HWND hwndDlg,
lIndex = ComboBox_GetItemData(GetDlgItem(hwndDlg, IDC_SOUND_LIST), lIndex); lIndex = ComboBox_GetItemData(GetDlgItem(hwndDlg, IDC_SOUND_LIST), lIndex);
if (lIndex != CB_ERR) if (lIndex != CB_ERR)
{ {
PlaySound((TCHAR*)lIndex, NULL, SND_FILENAME); PlaySoundW((PWCHAR)lIndex, NULL, SND_FILENAME);
} }
break; break;
} }
@ -1192,7 +1220,7 @@ SoundsDlgProc(HWND hwndDlg,
{ {
if (HIWORD(wParam) == CBN_SELENDOK) if (HIWORD(wParam) == CBN_SELENDOK)
{ {
(void)TreeView_DeleteAllItems(GetDlgItem(hwndDlg, IDC_SCHEME_LIST)); TreeView_DeleteAllItems(GetDlgItem(hwndDlg, IDC_SCHEME_LIST));
ShowSoundScheme(pGlobalData, hwndDlg); ShowSoundScheme(pGlobalData, hwndDlg);
EnableWindow(GetDlgItem(hwndDlg, IDC_SOUND_LIST), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_SOUND_LIST), FALSE);
EnableWindow(GetDlgItem(hwndDlg, IDC_TEXT_SOUND), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_TEXT_SOUND), FALSE);
@ -1208,7 +1236,7 @@ SoundsDlgProc(HWND hwndDlg,
{ {
PLABEL_CONTEXT pLabelContext; PLABEL_CONTEXT pLabelContext;
HTREEITEM hItem; HTREEITEM hItem;
TVITEM item; TVITEMW item;
LRESULT lIndex; LRESULT lIndex;
hItem = TreeView_GetSelection(GetDlgItem(hwndDlg, IDC_SCHEME_LIST)); hItem = TreeView_GetSelection(GetDlgItem(hwndDlg, IDC_SCHEME_LIST));
@ -1247,12 +1275,12 @@ SoundsDlgProc(HWND hwndDlg,
EnableWindow(GetDlgItem(hwndDlg, IDC_PLAY_SOUND), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_PLAY_SOUND), FALSE);
} }
pLabelContext->szValue[0] = L'\0'; pLabelContext->szValue[0] = UNICODE_NULL;
break; break;
} }
if (_tcsicmp(pLabelContext->szValue, (TCHAR*)lResult) || (lIndex != pLabelContext->szValue[0])) if (_wcsicmp(pLabelContext->szValue, (PWCHAR)lResult) || (lIndex != pLabelContext->szValue[0]))
{ {
/* Update the tree view item image */ /* Update the tree view item image */
item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE; item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
@ -1265,10 +1293,10 @@ SoundsDlgProc(HWND hwndDlg,
/// ///
/// Should store in current member /// Should store in current member
/// ///
_tcscpy(pLabelContext->szValue, (TCHAR*)lResult); StringCchCopyW(pLabelContext->szValue, _countof(pLabelContext->szValue), (PWCHAR)lResult);
} }
if (_tcslen((TCHAR*)lResult) && lIndex != 0 && pGlobalData->NumWavOut != 0) if (wcslen((PWCHAR)lResult) && lIndex != 0 && pGlobalData->NumWavOut != 0)
{ {
EnableWindow(GetDlgItem(hwndDlg, IDC_PLAY_SOUND), TRUE); EnableWindow(GetDlgItem(hwndDlg, IDC_PLAY_SOUND), TRUE);
} }
@ -1285,6 +1313,7 @@ SoundsDlgProc(HWND hwndDlg,
} }
case WM_DESTROY: case WM_DESTROY:
{ {
FreeSoundFiles(hwndDlg);
FreeSoundProfiles(hwndDlg); FreeSoundProfiles(hwndDlg);
FreeAppMap(pGlobalData); FreeAppMap(pGlobalData);
FreeLabelMap(pGlobalData); FreeLabelMap(pGlobalData);
@ -1296,11 +1325,11 @@ SoundsDlgProc(HWND hwndDlg,
case WM_NOTIFY: case WM_NOTIFY:
{ {
PLABEL_CONTEXT pLabelContext; PLABEL_CONTEXT pLabelContext;
TCHAR * ptr; PWCHAR ptr;
LPNMHDR lpnm = (LPNMHDR)lParam; LPNMHDR lpnm = (LPNMHDR)lParam;
switch(lpnm->code) switch (lpnm->code)
{ {
case PSN_APPLY: case PSN_APPLY:
{ {
@ -1309,7 +1338,7 @@ SoundsDlgProc(HWND hwndDlg,
} }
case TVN_SELCHANGED: case TVN_SELCHANGED:
{ {
LPNMTREEVIEW nm = (LPNMTREEVIEW)lParam; LPNMTREEVIEWW nm = (LPNMTREEVIEWW)lParam;
LRESULT lCount, lIndex, lResult; LRESULT lCount, lIndex, lResult;
pLabelContext = (PLABEL_CONTEXT)nm->itemNew.lParam; pLabelContext = (PLABEL_CONTEXT)nm->itemNew.lParam;
@ -1326,7 +1355,7 @@ SoundsDlgProc(HWND hwndDlg,
EnableWindow(GetDlgItem(hwndDlg, IDC_TEXT_SOUND), TRUE); EnableWindow(GetDlgItem(hwndDlg, IDC_TEXT_SOUND), TRUE);
EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE_SOUND), TRUE); EnableWindow(GetDlgItem(hwndDlg, IDC_BROWSE_SOUND), TRUE);
if (_tcslen(pLabelContext->szValue) == 0) if (wcslen(pLabelContext->szValue) == 0)
{ {
lIndex = ComboBox_SetCurSel(GetDlgItem(hwndDlg, IDC_SOUND_LIST), 0); lIndex = ComboBox_SetCurSel(GetDlgItem(hwndDlg, IDC_SOUND_LIST), 0);
EnableWindow(GetDlgItem(hwndDlg, IDC_PLAY_SOUND), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_PLAY_SOUND), FALSE);
@ -1343,14 +1372,14 @@ SoundsDlgProc(HWND hwndDlg,
if (lResult == CB_ERR || lResult == 0) if (lResult == CB_ERR || lResult == 0)
continue; continue;
if (!_tcscmp((TCHAR*)lResult, pLabelContext->szValue)) if (!wcscmp((PWCHAR)lResult, pLabelContext->szValue))
{ {
ComboBox_SetCurSel(GetDlgItem(hwndDlg, IDC_SOUND_LIST), lIndex); ComboBox_SetCurSel(GetDlgItem(hwndDlg, IDC_SOUND_LIST), lIndex);
return FALSE; return FALSE;
} }
} }
ptr = _tcsrchr(pLabelContext->szValue, _T('\\')); ptr = wcsrchr(pLabelContext->szValue, L'\\');
if (ptr) if (ptr)
{ {
ptr++; ptr++;
@ -1363,7 +1392,7 @@ SoundsDlgProc(HWND hwndDlg,
lIndex = ComboBox_AddString(GetDlgItem(hwndDlg, IDC_SOUND_LIST), ptr); lIndex = ComboBox_AddString(GetDlgItem(hwndDlg, IDC_SOUND_LIST), ptr);
if (lIndex != CB_ERR) if (lIndex != CB_ERR)
{ {
ComboBox_SetItemData(GetDlgItem(hwndDlg, IDC_SOUND_LIST), lIndex, _tcsdup(pLabelContext->szValue)); ComboBox_SetItemData(GetDlgItem(hwndDlg, IDC_SOUND_LIST), lIndex, _wcsdup(pLabelContext->szValue));
ComboBox_SetCurSel(GetDlgItem(hwndDlg, IDC_SOUND_LIST), lIndex); ComboBox_SetCurSel(GetDlgItem(hwndDlg, IDC_SOUND_LIST), lIndex);
} }
break; break;

View file

@ -26,38 +26,38 @@ OnInitDialog(
PPAGE_DATA pPageData, PPAGE_DATA pPageData,
HWND hwndDlg) HWND hwndDlg)
{ {
TCHAR szBuffer[256]; WCHAR szBuffer[256];
MIXERLINE mxln; MIXERLINEW mxln;
MIXERCONTROL mxc; MIXERCONTROLW mxc;
MIXERLINECONTROLS mxlctrl; MIXERLINECONTROLSW mxlctrl;
MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS mxcd;
INT i, j; INT i, j;
/* Open the mixer */ /* Open the mixer */
if (mixerOpen(&pPageData->hMixer, 0, PtrToUlong(hwndDlg), 0, MIXER_OBJECTF_MIXER | CALLBACK_WINDOW) != MMSYSERR_NOERROR) if (mixerOpen(&pPageData->hMixer, 0, PtrToUlong(hwndDlg), 0, MIXER_OBJECTF_MIXER | CALLBACK_WINDOW) != MMSYSERR_NOERROR)
{ {
MessageBox(hwndDlg, _T("Cannot open mixer"), NULL, MB_OK); MessageBoxW(hwndDlg, L"Cannot open mixer", NULL, MB_OK);
return FALSE; return FALSE;
} }
/* Retrieve the mixer information */ /* Retrieve the mixer information */
mxln.cbStruct = sizeof(MIXERLINE); mxln.cbStruct = sizeof(MIXERLINEW);
mxln.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; mxln.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
if (mixerGetLineInfo((HMIXEROBJ)pPageData->hMixer, &mxln, MIXER_OBJECTF_HMIXER | MIXER_GETLINEINFOF_COMPONENTTYPE) != MMSYSERR_NOERROR) if (mixerGetLineInfoW((HMIXEROBJ)pPageData->hMixer, &mxln, MIXER_OBJECTF_HMIXER | MIXER_GETLINEINFOF_COMPONENTTYPE) != MMSYSERR_NOERROR)
return FALSE; return FALSE;
pPageData->volumeChannels = mxln.cChannels; pPageData->volumeChannels = mxln.cChannels;
/* Retrieve the line information */ /* Retrieve the line information */
mxlctrl.cbStruct = sizeof(MIXERLINECONTROLS); mxlctrl.cbStruct = sizeof(MIXERLINECONTROLSW);
mxlctrl.dwLineID = mxln.dwLineID; mxlctrl.dwLineID = mxln.dwLineID;
mxlctrl.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME; mxlctrl.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
mxlctrl.cControls = 1; mxlctrl.cControls = 1;
mxlctrl.cbmxctrl = sizeof(MIXERCONTROL); mxlctrl.cbmxctrl = sizeof(MIXERCONTROLW);
mxlctrl.pamxctrl = &mxc; mxlctrl.pamxctrl = &mxc;
if (mixerGetLineControls((HMIXEROBJ)pPageData->hMixer, &mxlctrl, MIXER_OBJECTF_HMIXER | MIXER_GETLINECONTROLSF_ONEBYTYPE) != MMSYSERR_NOERROR) if (mixerGetLineControlsW((HMIXEROBJ)pPageData->hMixer, &mxlctrl, MIXER_OBJECTF_HMIXER | MIXER_GETLINECONTROLSF_ONEBYTYPE) != MMSYSERR_NOERROR)
return FALSE; return FALSE;
pPageData->volumeControlID = mxc.dwControlID; pPageData->volumeControlID = mxc.dwControlID;
@ -80,7 +80,7 @@ OnInitDialog(
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED); mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
mxcd.paDetails = pPageData->volumeValues; mxcd.paDetails = pPageData->volumeValues;
if (mixerGetControlDetails((HMIXEROBJ)pPageData->hMixer, &mxcd, MIXER_OBJECTF_HMIXER | MIXER_GETCONTROLDETAILSF_VALUE) != MMSYSERR_NOERROR) if (mixerGetControlDetailsW((HMIXEROBJ)pPageData->hMixer, &mxcd, MIXER_OBJECTF_HMIXER | MIXER_GETCONTROLDETAILSF_VALUE) != MMSYSERR_NOERROR)
return FALSE; return FALSE;
/* Initialize the channels */ /* Initialize the channels */
@ -89,14 +89,14 @@ OnInitDialog(
j = i * 4; j = i * 4;
/* Set the channel name */ /* Set the channel name */
LoadString(hApplet, IDS_SPEAKER_LEFT + i, szBuffer, _countof(szBuffer)); LoadStringW(hApplet, IDS_SPEAKER_LEFT + i, szBuffer, _countof(szBuffer));
SetWindowText(GetDlgItem(hwndDlg, 9472 + j), szBuffer); SetWindowTextW(GetDlgItem(hwndDlg, 9472 + j), szBuffer);
/* Initialize the channel trackbar */ /* Initialize the channel trackbar */
SendDlgItemMessage(hwndDlg, 9475 + j, TBM_SETRANGE, (WPARAM)TRUE, (LPARAM)MAKELONG(VOLUME_MIN, VOLUME_MAX)); SendDlgItemMessageW(hwndDlg, 9475 + j, TBM_SETRANGE, (WPARAM)TRUE, MAKELPARAM(VOLUME_MIN, VOLUME_MAX));
SendDlgItemMessage(hwndDlg, 9475 + j, TBM_SETTICFREQ, VOLUME_TICFREQ, 0); SendDlgItemMessageW(hwndDlg, 9475 + j, TBM_SETTICFREQ, VOLUME_TICFREQ, 0);
SendDlgItemMessage(hwndDlg, 9475 + j, TBM_SETPAGESIZE, 0, VOLUME_PAGESIZE); SendDlgItemMessageW(hwndDlg, 9475 + j, TBM_SETPAGESIZE, 0, VOLUME_PAGESIZE);
SendDlgItemMessage(hwndDlg, 9475 + j, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(pPageData->volumeValues[i].dwValue - pPageData->volumeMinimum) / pPageData->volumeStep); SendDlgItemMessageW(hwndDlg, 9475 + j, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(pPageData->volumeValues[i].dwValue - pPageData->volumeMinimum) / pPageData->volumeStep);
} }
/* Hide the unused controls */ /* Hide the unused controls */
@ -130,14 +130,14 @@ OnMixerControlChange(
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED); mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
mxcd.paDetails = pPageData->volumeValues; mxcd.paDetails = pPageData->volumeValues;
if (mixerGetControlDetails((HMIXEROBJ)pPageData->hMixer, &mxcd, MIXER_OBJECTF_HMIXER | MIXER_GETCONTROLDETAILSF_VALUE) != MMSYSERR_NOERROR) if (mixerGetControlDetailsW((HMIXEROBJ)pPageData->hMixer, &mxcd, MIXER_OBJECTF_HMIXER | MIXER_GETCONTROLDETAILSF_VALUE) != MMSYSERR_NOERROR)
return; return;
for (i = 0; i < pPageData->volumeChannels; i++) for (i = 0; i < pPageData->volumeChannels; i++)
{ {
j = i * 4; j = i * 4;
SendDlgItemMessage(hwndDlg, 9475 + j, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(pPageData->volumeValues[i].dwValue - pPageData->volumeMinimum) / pPageData->volumeStep); SendDlgItemMessageW(hwndDlg, 9475 + j, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(pPageData->volumeValues[i].dwValue - pPageData->volumeMinimum) / pPageData->volumeStep);
} }
} }
@ -154,14 +154,14 @@ OnHScroll(
DWORD dwValue, dwPosition; DWORD dwValue, dwPosition;
INT id, idx, i, j; INT id, idx, i, j;
id = (INT)GetWindowLongPtr((HWND)lParam, GWLP_ID); id = (INT)GetWindowLongPtrW((HWND)lParam, GWLP_ID);
if (id < 9475 || id > 9503) if (id < 9475 || id > 9503)
return; return;
if ((id - 9475) % 4 != 0) if ((id - 9475) % 4 != 0)
return; return;
dwPosition = (DWORD)SendDlgItemMessage(hwndDlg, id, TBM_GETPOS, 0, 0); dwPosition = (DWORD)SendDlgItemMessageW(hwndDlg, id, TBM_GETPOS, 0, 0);
if (dwPosition == VOLUME_MIN) if (dwPosition == VOLUME_MIN)
dwValue = pPageData->volumeMinimum; dwValue = pPageData->volumeMinimum;
@ -176,7 +176,7 @@ OnHScroll(
{ {
j = 9475 + (i * 4); j = 9475 + (i * 4);
if (j != id) if (j != id)
SendDlgItemMessage(hwndDlg, j, TBM_SETPOS, (WPARAM)TRUE, dwPosition); SendDlgItemMessageW(hwndDlg, j, TBM_SETPOS, (WPARAM)TRUE, dwPosition);
pPageData->volumeValues[i].dwValue = dwValue; pPageData->volumeValues[i].dwValue = dwValue;
} }
@ -235,15 +235,13 @@ SpeakerVolumeDlgProc(
{ {
PPAGE_DATA pPageData; PPAGE_DATA pPageData;
UNREFERENCED_PARAMETER(wParam); pPageData = (PPAGE_DATA)GetWindowLongPtrW(hwndDlg, DWLP_USER);
pPageData = (PPAGE_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); switch (uMsg)
switch(uMsg)
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
pPageData = (PPAGE_DATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(PAGE_DATA)); pPageData = (PPAGE_DATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(PAGE_DATA));
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pPageData); SetWindowLongPtrW(hwndDlg, DWLP_USER, (LONG_PTR)pPageData);
if (pPageData) if (pPageData)
{ {
@ -262,7 +260,7 @@ SpeakerVolumeDlgProc(
HeapFree(GetProcessHeap(), 0, pPageData); HeapFree(GetProcessHeap(), 0, pPageData);
pPageData = NULL; pPageData = NULL;
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)NULL); SetWindowLongPtrW(hwndDlg, DWLP_USER, (LONG_PTR)NULL);
} }
break; break;
@ -279,7 +277,7 @@ SpeakerVolumeDlgProc(
{ {
case 9504: case 9504:
if (HIWORD(wParam) == BN_CLICKED) if (HIWORD(wParam) == BN_CLICKED)
pPageData->volumeSync = (SendDlgItemMessage(hwndDlg, 9504, BM_GETCHECK, 0, 0) == BST_CHECKED); pPageData->volumeSync = (SendDlgItemMessageW(hwndDlg, 9504, BM_GETCHECK, 0, 0) == BST_CHECKED);
break; break;
case 9505: case 9505:
@ -306,16 +304,16 @@ INT_PTR
SpeakerVolume( SpeakerVolume(
HWND hwndDlg) HWND hwndDlg)
{ {
PROPSHEETPAGE psp[1]; PROPSHEETPAGEW psp[1];
PROPSHEETHEADER psh; PROPSHEETHEADERW psh;
ZeroMemory(&psh, sizeof(PROPSHEETHEADER)); ZeroMemory(&psh, sizeof(PROPSHEETHEADERW));
psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwSize = sizeof(PROPSHEETHEADERW);
psh.dwFlags = PSH_PROPSHEETPAGE; psh.dwFlags = PSH_PROPSHEETPAGE;
psh.hwndParent = hwndDlg; psh.hwndParent = hwndDlg;
psh.hInstance = hApplet; psh.hInstance = hApplet;
psh.pszCaption = MAKEINTRESOURCE(IDS_SPEAKER_VOLUME); psh.pszCaption = MAKEINTRESOURCE(IDS_SPEAKER_VOLUME);
psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE); psh.nPages = _countof(psp);
psh.nStartPage = 0; psh.nStartPage = 0;
psh.ppsp = psp; psh.ppsp = psp;
@ -324,5 +322,5 @@ SpeakerVolume(
psp[0].hInstance = hApplet; psp[0].hInstance = hApplet;
psp[0].pszTitle = MAKEINTRESOURCE(IDS_SPEAKER_VOLUME); psp[0].pszTitle = MAKEINTRESOURCE(IDS_SPEAKER_VOLUME);
return (LONG)(PropertySheet(&psh) != -1); return (LONG)(PropertySheetW(&psh) != -1);
} }

View file

@ -19,8 +19,7 @@ VoiceDlgProc(HWND hwndDlg,
{ {
UNREFERENCED_PARAMETER(lParam); UNREFERENCED_PARAMETER(lParam);
UNREFERENCED_PARAMETER(wParam); UNREFERENCED_PARAMETER(wParam);
UNREFERENCED_PARAMETER(hwndDlg); switch (uMsg)
switch(uMsg)
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
{ {

View file

@ -51,8 +51,8 @@ InitImageInfo(PIMGINFO ImgInfo)
ZeroMemory(ImgInfo, sizeof(*ImgInfo)); ZeroMemory(ImgInfo, sizeof(*ImgInfo));
ImgInfo->hBitmap = LoadImage(hApplet, ImgInfo->hBitmap = LoadImageW(hApplet,
MAKEINTRESOURCE(IDB_SPEAKIMG), MAKEINTRESOURCEW(IDB_SPEAKIMG),
IMAGE_BITMAP, IMAGE_BITMAP,
0, 0,
0, 0,
@ -60,7 +60,7 @@ InitImageInfo(PIMGINFO ImgInfo)
if (ImgInfo->hBitmap != NULL) if (ImgInfo->hBitmap != NULL)
{ {
GetObject(ImgInfo->hBitmap, sizeof(BITMAP), &bitmap); GetObjectW(ImgInfo->hBitmap, sizeof(BITMAP), &bitmap);
ImgInfo->cxSource = bitmap.bmWidth; ImgInfo->cxSource = bitmap.bmWidth;
ImgInfo->cySource = bitmap.bmHeight; ImgInfo->cySource = bitmap.bmHeight;
@ -71,28 +71,30 @@ InitImageInfo(PIMGINFO ImgInfo)
VOID VOID
GetMuteControl(PGLOBAL_DATA pGlobalData) GetMuteControl(PGLOBAL_DATA pGlobalData)
{ {
MIXERLINE mxln; MIXERLINEW mxln;
MIXERCONTROL mxc; MIXERCONTROLW mxc;
MIXERLINECONTROLS mxlctrl; MIXERLINECONTROLSW mxlctrl;
if (pGlobalData->hMixer == NULL) if (pGlobalData->hMixer == NULL)
return; return;
mxln.cbStruct = sizeof(MIXERLINE); mxln.cbStruct = sizeof(MIXERLINEW);
mxln.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; mxln.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
if (mixerGetLineInfo((HMIXEROBJ)pGlobalData->hMixer, &mxln, MIXER_OBJECTF_HMIXER | MIXER_GETLINEINFOF_COMPONENTTYPE) if (mixerGetLineInfoW((HMIXEROBJ)pGlobalData->hMixer, &mxln, MIXER_OBJECTF_HMIXER | MIXER_GETLINEINFOF_COMPONENTTYPE)
!= MMSYSERR_NOERROR) return; != MMSYSERR_NOERROR)
return;
mxlctrl.cbStruct = sizeof(MIXERLINECONTROLS); mxlctrl.cbStruct = sizeof(MIXERLINECONTROLSW);
mxlctrl.dwLineID = mxln.dwLineID; mxlctrl.dwLineID = mxln.dwLineID;
mxlctrl.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE; mxlctrl.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE;
mxlctrl.cControls = 1; mxlctrl.cControls = 1;
mxlctrl.cbmxctrl = sizeof(MIXERCONTROL); mxlctrl.cbmxctrl = sizeof(MIXERCONTROLW);
mxlctrl.pamxctrl = &mxc; mxlctrl.pamxctrl = &mxc;
if (mixerGetLineControls((HMIXEROBJ)pGlobalData->hMixer, &mxlctrl, MIXER_OBJECTF_HMIXER | MIXER_GETLINECONTROLSF_ONEBYTYPE) if (mixerGetLineControlsW((HMIXEROBJ)pGlobalData->hMixer, &mxlctrl, MIXER_OBJECTF_HMIXER | MIXER_GETLINECONTROLSF_ONEBYTYPE)
!= MMSYSERR_NOERROR) return; != MMSYSERR_NOERROR)
return;
pGlobalData->muteControlID = mxc.dwControlID; pGlobalData->muteControlID = mxc.dwControlID;
} }
@ -114,7 +116,7 @@ GetMuteState(PGLOBAL_DATA pGlobalData)
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN); mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
mxcd.paDetails = &mxcdMute; mxcd.paDetails = &mxcdMute;
if (mixerGetControlDetails((HMIXEROBJ)pGlobalData->hMixer, &mxcd, MIXER_OBJECTF_HMIXER | MIXER_GETCONTROLDETAILSF_VALUE) if (mixerGetControlDetailsW((HMIXEROBJ)pGlobalData->hMixer, &mxcd, MIXER_OBJECTF_HMIXER | MIXER_GETCONTROLDETAILSF_VALUE)
!= MMSYSERR_NOERROR) != MMSYSERR_NOERROR)
return; return;
@ -147,28 +149,28 @@ SwitchMuteState(PGLOBAL_DATA pGlobalData)
VOID VOID
GetVolumeControl(PGLOBAL_DATA pGlobalData) GetVolumeControl(PGLOBAL_DATA pGlobalData)
{ {
MIXERLINE mxln; MIXERLINEW mxln;
MIXERCONTROL mxc; MIXERCONTROLW mxc;
MIXERLINECONTROLS mxlc; MIXERLINECONTROLSW mxlc;
if (pGlobalData->hMixer == NULL) if (pGlobalData->hMixer == NULL)
return; return;
mxln.cbStruct = sizeof(MIXERLINE); mxln.cbStruct = sizeof(MIXERLINEW);
mxln.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; mxln.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
if (mixerGetLineInfo((HMIXEROBJ)pGlobalData->hMixer, &mxln, MIXER_OBJECTF_HMIXER | MIXER_GETLINEINFOF_COMPONENTTYPE) if (mixerGetLineInfoW((HMIXEROBJ)pGlobalData->hMixer, &mxln, MIXER_OBJECTF_HMIXER | MIXER_GETLINEINFOF_COMPONENTTYPE)
!= MMSYSERR_NOERROR) != MMSYSERR_NOERROR)
return; return;
pGlobalData->volumeChannels = mxln.cChannels; pGlobalData->volumeChannels = mxln.cChannels;
mxlc.cbStruct = sizeof(MIXERLINECONTROLS); mxlc.cbStruct = sizeof(MIXERLINECONTROLSW);
mxlc.dwLineID = mxln.dwLineID; mxlc.dwLineID = mxln.dwLineID;
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME; mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
mxlc.cControls = 1; mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(MIXERCONTROL); mxlc.cbmxctrl = sizeof(MIXERCONTROLW);
mxlc.pamxctrl = &mxc; mxlc.pamxctrl = &mxc;
if (mixerGetLineControls((HMIXEROBJ)pGlobalData->hMixer, &mxlc, MIXER_OBJECTF_HMIXER | MIXER_GETLINECONTROLSF_ONEBYTYPE) if (mixerGetLineControlsW((HMIXEROBJ)pGlobalData->hMixer, &mxlc, MIXER_OBJECTF_HMIXER | MIXER_GETLINECONTROLSF_ONEBYTYPE)
!= MMSYSERR_NOERROR) != MMSYSERR_NOERROR)
return; return;
@ -215,7 +217,7 @@ GetVolumeValue(
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED); mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
mxcd.paDetails = pGlobalData->volumePreviousValues; mxcd.paDetails = pGlobalData->volumePreviousValues;
if (mixerGetControlDetails((HMIXEROBJ)pGlobalData->hMixer, &mxcd, MIXER_OBJECTF_HMIXER | MIXER_GETCONTROLDETAILSF_VALUE) if (mixerGetControlDetailsW((HMIXEROBJ)pGlobalData->hMixer, &mxcd, MIXER_OBJECTF_HMIXER | MIXER_GETCONTROLDETAILSF_VALUE)
!= MMSYSERR_NOERROR) != MMSYSERR_NOERROR)
return; return;
@ -259,7 +261,7 @@ SetVolumeValue(PGLOBAL_DATA pGlobalData,
else else
{ {
pGlobalData->volumeCurrentValues[i].dwValue = pGlobalData->volumeCurrentValues[i].dwValue =
pGlobalData->volumePreviousValues[i].dwValue * dwVolume / pGlobalData-> maxVolume; pGlobalData->volumePreviousValues[i].dwValue * dwVolume / pGlobalData->maxVolume;
} }
} }
@ -331,14 +333,14 @@ VOID
InitVolumeControls(HWND hwndDlg, PGLOBAL_DATA pGlobalData) InitVolumeControls(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
{ {
UINT NumMixers; UINT NumMixers;
MIXERCAPS mxc; MIXERCAPSW mxc;
TCHAR szNoDevices[256]; WCHAR szNoDevices[256];
LoadString(hApplet, IDS_NO_DEVICES, szNoDevices, _countof(szNoDevices)); LoadStringW(hApplet, IDS_NO_DEVICES, szNoDevices, _countof(szNoDevices));
SendDlgItemMessage(hwndDlg, IDC_VOLUME_TRACKBAR, TBM_SETRANGE, (WPARAM)TRUE, (LPARAM)MAKELONG(VOLUME_MIN, VOLUME_MAX)); SendDlgItemMessageW(hwndDlg, IDC_VOLUME_TRACKBAR, TBM_SETRANGE, (WPARAM)TRUE, (LPARAM)MAKELONG(VOLUME_MIN, VOLUME_MAX));
SendDlgItemMessage(hwndDlg, IDC_VOLUME_TRACKBAR, TBM_SETTICFREQ, VOLUME_TICFREQ, 0); SendDlgItemMessageW(hwndDlg, IDC_VOLUME_TRACKBAR, TBM_SETTICFREQ, VOLUME_TICFREQ, 0);
SendDlgItemMessage(hwndDlg, IDC_VOLUME_TRACKBAR, TBM_SETPAGESIZE, 0, VOLUME_PAGESIZE); SendDlgItemMessageW(hwndDlg, IDC_VOLUME_TRACKBAR, TBM_SETPAGESIZE, 0, VOLUME_PAGESIZE);
NumMixers = mixerGetNumDevs(); NumMixers = mixerGetNumDevs();
if (!NumMixers) if (!NumMixers)
@ -351,21 +353,21 @@ InitVolumeControls(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
EnableWindow(GetDlgItem(hwndDlg, IDC_ADVANCED_BTN), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_ADVANCED_BTN), FALSE);
EnableWindow(GetDlgItem(hwndDlg, IDC_SPEAKER_VOL_BTN), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_SPEAKER_VOL_BTN), FALSE);
EnableWindow(GetDlgItem(hwndDlg, IDC_ADVANCED2_BTN), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_ADVANCED2_BTN), FALSE);
SendDlgItemMessage(hwndDlg, IDC_MUTE_ICON, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pGlobalData->hIconNoHW); SendDlgItemMessageW(hwndDlg, IDC_MUTE_ICON, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pGlobalData->hIconNoHW);
SetDlgItemText(hwndDlg, IDC_DEVICE_NAME, szNoDevices); SetDlgItemTextW(hwndDlg, IDC_DEVICE_NAME, szNoDevices);
return; return;
} }
if (mixerOpen(&pGlobalData->hMixer, 0, PtrToUlong(hwndDlg), 0, MIXER_OBJECTF_MIXER | CALLBACK_WINDOW) != MMSYSERR_NOERROR) if (mixerOpen(&pGlobalData->hMixer, 0, PtrToUlong(hwndDlg), 0, MIXER_OBJECTF_MIXER | CALLBACK_WINDOW) != MMSYSERR_NOERROR)
{ {
MessageBox(hwndDlg, _T("Cannot open mixer"), NULL, MB_OK); MessageBoxW(hwndDlg, L"Cannot open mixer", NULL, MB_OK);
return; return;
} }
ZeroMemory(&mxc, sizeof(MIXERCAPS)); ZeroMemory(&mxc, sizeof(MIXERCAPSW));
if (mixerGetDevCaps(PtrToUint(pGlobalData->hMixer), &mxc, sizeof(MIXERCAPS)) != MMSYSERR_NOERROR) if (mixerGetDevCapsW(PtrToUint(pGlobalData->hMixer), &mxc, sizeof(MIXERCAPSW)) != MMSYSERR_NOERROR)
{ {
MessageBox(hwndDlg, _T("mixerGetDevCaps failed"), NULL, MB_OK); MessageBoxW(hwndDlg, L"mixerGetDevCaps failed", NULL, MB_OK);
return; return;
} }
@ -377,20 +379,20 @@ InitVolumeControls(HWND hwndDlg, PGLOBAL_DATA pGlobalData)
GetMuteState(pGlobalData); GetMuteState(pGlobalData);
if (pGlobalData->muteVal) if (pGlobalData->muteVal)
{ {
SendDlgItemMessage(hwndDlg, IDC_MUTE_CHECKBOX, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0); SendDlgItemMessageW(hwndDlg, IDC_MUTE_CHECKBOX, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
SendDlgItemMessage(hwndDlg, IDC_MUTE_ICON, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pGlobalData->hIconMuted); SendDlgItemMessageW(hwndDlg, IDC_MUTE_ICON, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pGlobalData->hIconMuted);
} }
else else
{ {
SendDlgItemMessage(hwndDlg, IDC_MUTE_CHECKBOX, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0); SendDlgItemMessageW(hwndDlg, IDC_MUTE_CHECKBOX, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
SendDlgItemMessage(hwndDlg, IDC_MUTE_ICON, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pGlobalData->hIconUnMuted); SendDlgItemMessageW(hwndDlg, IDC_MUTE_ICON, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pGlobalData->hIconUnMuted);
} }
GetVolumeControl(pGlobalData); GetVolumeControl(pGlobalData);
GetVolumeValue(pGlobalData, TRUE); GetVolumeValue(pGlobalData, TRUE);
SendDlgItemMessage(hwndDlg, IDC_DEVICE_NAME, WM_SETTEXT, 0, (LPARAM)mxc.szPname); SendDlgItemMessageW(hwndDlg, IDC_DEVICE_NAME, WM_SETTEXT, 0, (LPARAM)mxc.szPname);
SendDlgItemMessage(hwndDlg, IDC_VOLUME_TRACKBAR, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(pGlobalData->maxVolume - pGlobalData->volumeMinimum) / pGlobalData->volumeStep); SendDlgItemMessageW(hwndDlg, IDC_VOLUME_TRACKBAR, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(pGlobalData->maxVolume - pGlobalData->volumeMinimum) / pGlobalData->volumeStep);
} }
VOID VOID
@ -408,7 +410,7 @@ LaunchSoundControl(HWND hwndDlg)
{ {
if ((INT_PTR)ShellExecuteW(NULL, L"open", L"sndvol32.exe", NULL, NULL, SW_SHOWNORMAL) > 32) if ((INT_PTR)ShellExecuteW(NULL, L"open", L"sndvol32.exe", NULL, NULL, SW_SHOWNORMAL) > 32)
return; return;
MessageBox(hwndDlg, _T("Cannot run sndvol32.exe"), NULL, MB_OK); MessageBoxW(hwndDlg, L"Cannot run sndvol32.exe", NULL, MB_OK);
} }
/* Volume property page dialog callback */ /* Volume property page dialog callback */
@ -421,42 +423,40 @@ VolumeDlgProc(HWND hwndDlg,
{ {
static IMGINFO ImgInfo; static IMGINFO ImgInfo;
PGLOBAL_DATA pGlobalData; PGLOBAL_DATA pGlobalData;
UNREFERENCED_PARAMETER(lParam);
UNREFERENCED_PARAMETER(wParam);
pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); pGlobalData = (PGLOBAL_DATA)GetWindowLongPtrW(hwndDlg, DWLP_USER);
switch(uMsg) switch (uMsg)
{ {
case MM_MIXM_LINE_CHANGE: case MM_MIXM_LINE_CHANGE:
{ {
GetMuteState(pGlobalData); GetMuteState(pGlobalData);
if (pGlobalData->muteVal) if (pGlobalData->muteVal)
{ {
SendDlgItemMessage(hwndDlg, IDC_MUTE_CHECKBOX, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0); SendDlgItemMessageW(hwndDlg, IDC_MUTE_CHECKBOX, BM_SETCHECK, (WPARAM)BST_CHECKED, 0);
SendDlgItemMessage(hwndDlg, IDC_MUTE_ICON, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pGlobalData->hIconMuted); SendDlgItemMessageW(hwndDlg, IDC_MUTE_ICON, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pGlobalData->hIconMuted);
} }
else else
{ {
SendDlgItemMessage(hwndDlg, IDC_MUTE_CHECKBOX, BM_SETCHECK, (WPARAM)BST_UNCHECKED, (LPARAM)0); SendDlgItemMessageW(hwndDlg, IDC_MUTE_CHECKBOX, BM_SETCHECK, (WPARAM)BST_UNCHECKED, 0);
SendDlgItemMessage(hwndDlg, IDC_MUTE_ICON, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pGlobalData->hIconUnMuted); SendDlgItemMessageW(hwndDlg, IDC_MUTE_ICON, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pGlobalData->hIconUnMuted);
} }
break; break;
} }
case MM_MIXM_CONTROL_CHANGE: case MM_MIXM_CONTROL_CHANGE:
{ {
GetVolumeValue(pGlobalData, FALSE); GetVolumeValue(pGlobalData, FALSE);
SendDlgItemMessage(hwndDlg, IDC_VOLUME_TRACKBAR, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(pGlobalData->maxVolume - pGlobalData->volumeMinimum) / pGlobalData->volumeStep); SendDlgItemMessageW(hwndDlg, IDC_VOLUME_TRACKBAR, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)(pGlobalData->maxVolume - pGlobalData->volumeMinimum) / pGlobalData->volumeStep);
break; break;
} }
case WM_INITDIALOG: case WM_INITDIALOG:
{ {
pGlobalData = (GLOBAL_DATA*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBAL_DATA)); pGlobalData = (PGLOBAL_DATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBAL_DATA));
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData); SetWindowLongPtrW(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
pGlobalData->hIconUnMuted = LoadImage(hApplet, MAKEINTRESOURCE(IDI_CPLICON), IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR); pGlobalData->hIconUnMuted = LoadImageW(hApplet, MAKEINTRESOURCEW(IDI_CPLICON), IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);
pGlobalData->hIconMuted = LoadImage(hApplet, MAKEINTRESOURCE(IDI_MUTED_ICON), IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR); pGlobalData->hIconMuted = LoadImageW(hApplet, MAKEINTRESOURCEW(IDI_MUTED_ICON), IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);
pGlobalData->hIconNoHW = LoadImage(hApplet, MAKEINTRESOURCE(IDI_NO_HW), IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR); pGlobalData->hIconNoHW = LoadImageW(hApplet, MAKEINTRESOURCEW(IDI_NO_HW), IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);
InitImageInfo(&ImgInfo); InitImageInfo(&ImgInfo);
InitVolumeControls(hwndDlg, pGlobalData); InitVolumeControls(hwndDlg, pGlobalData);
@ -466,8 +466,8 @@ VolumeDlgProc(HWND hwndDlg,
case WM_DRAWITEM: case WM_DRAWITEM:
{ {
LPDRAWITEMSTRUCT lpDrawItem; LPDRAWITEMSTRUCT lpDrawItem;
lpDrawItem = (LPDRAWITEMSTRUCT) lParam; lpDrawItem = (LPDRAWITEMSTRUCT)lParam;
if(lpDrawItem->CtlID == IDC_SPEAKIMG) if (lpDrawItem->CtlID == IDC_SPEAKIMG)
{ {
HDC hdcMem; HDC hdcMem;
LONG left; LONG left;
@ -504,11 +504,11 @@ VolumeDlgProc(HWND hwndDlg,
SwitchMuteState(pGlobalData); SwitchMuteState(pGlobalData);
if (pGlobalData->muteVal) if (pGlobalData->muteVal)
{ {
SendDlgItemMessage(hwndDlg, IDC_MUTE_ICON, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pGlobalData->hIconMuted); SendDlgItemMessageW(hwndDlg, IDC_MUTE_ICON, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pGlobalData->hIconMuted);
} }
else else
{ {
SendDlgItemMessage(hwndDlg, IDC_MUTE_ICON, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pGlobalData->hIconUnMuted); SendDlgItemMessageW(hwndDlg, IDC_MUTE_ICON, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pGlobalData->hIconUnMuted);
} }
PropSheet_Changed(GetParent(hwndDlg), hwndDlg); PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
@ -544,12 +544,12 @@ VolumeDlgProc(HWND hwndDlg,
break; break;
case TB_ENDTRACK: case TB_ENDTRACK:
PlaySound((LPCTSTR)SND_ALIAS_SYSTEMDEFAULT, NULL, SND_ALIAS_ID | SND_ASYNC); PlaySoundW((LPCWSTR)SND_ALIAS_SYSTEMDEFAULT, NULL, SND_ALIAS_ID | SND_ASYNC);
break; break;
default: default:
SetVolumeValue(pGlobalData, SetVolumeValue(pGlobalData,
(DWORD)SendDlgItemMessage(hwndDlg, IDC_VOLUME_TRACKBAR, TBM_GETPOS, 0, 0)); (DWORD)SendDlgItemMessageW(hwndDlg, IDC_VOLUME_TRACKBAR, TBM_GETPOS, 0, 0));
break; break;
} }
} }