ReactOS 0.4.15-dev-7907-g95bf896
sounds.c File Reference
#include "mmsys.h"
#include <commdlg.h>
#include <windowsx.h>
#include <debug.h>
Include dependency graph for sounds.c:

Go to the source code of this file.

Classes

struct  _LABEL_MAP
 
struct  _APP_MAP
 
struct  _LABEL_CONTEXT
 
struct  _SOUND_SCHEME_CONTEXT
 
struct  _GLOBAL_DATA
 

Macros

#define ID_SOUND_TEST_TIMER   1
 

Typedefs

typedef struct _LABEL_MAP LABEL_MAP
 
typedef struct _LABEL_MAPPLABEL_MAP
 
typedef struct _APP_MAP APP_MAP
 
typedef struct _APP_MAPPAPP_MAP
 
typedef struct _LABEL_CONTEXT LABEL_CONTEXT
 
typedef struct _LABEL_CONTEXTPLABEL_CONTEXT
 
typedef struct _SOUND_SCHEME_CONTEXT SOUND_SCHEME_CONTEXT
 
typedef struct _SOUND_SCHEME_CONTEXTPSOUND_SCHEME_CONTEXT
 
typedef struct _GLOBAL_DATA GLOBAL_DATA
 
typedef struct _GLOBAL_DATAPGLOBAL_DATA
 

Functions

LPWSTR MakeFilter (LPWSTR psz)
 
PLABEL_MAP FindLabel (PGLOBAL_DATA pGlobalData, PAPP_MAP pAppMap, PCWSTR szName)
 
VOID RemoveLabel (PGLOBAL_DATA pGlobalData, PLABEL_MAP pMap)
 
static VOID FreeLabelMap (PGLOBAL_DATA pGlobalData)
 
PAPP_MAP FindApp (PGLOBAL_DATA pGlobalData, PCWSTR szName)
 
static VOID FreeAppMap (PGLOBAL_DATA pGlobalData)
 
PLABEL_CONTEXT FindLabelContext (PGLOBAL_DATA pGlobalData, PSOUND_SCHEME_CONTEXT pSoundScheme, PCWSTR AppName, PCWSTR LabelName)
 
BOOL LoadEventLabel (PGLOBAL_DATA pGlobalData, HKEY hKey, PCWSTR szSubKey)
 
BOOL LoadEventLabels (PGLOBAL_DATA pGlobalData)
 
BOOL AddSoundProfile (HWND hwndDlg, HKEY hKey, PCWSTR szSubKey, BOOL SetDefault)
 
DWORD EnumerateSoundProfiles (PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey)
 
PSOUND_SCHEME_CONTEXT FindSoundProfile (HWND hwndDlg, PCWSTR szName)
 
static VOID FreeSoundProfiles (HWND hwndDlg)
 
BOOL ImportSoundLabel (PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, PCWSTR szProfile, PCWSTR szLabelName, PCWSTR szAppName, PAPP_MAP AppMap, PLABEL_MAP LabelMap)
 
DWORD ImportSoundEntry (PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, PCWSTR szLabelName, PCWSTR szAppName, PAPP_MAP pAppMap)
 
DWORD ImportAppProfile (PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, PCWSTR szAppName)
 
BOOL ImportSoundProfiles (PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey)
 
BOOL LoadSoundProfiles (PGLOBAL_DATA pGlobalData, HWND hwndDlg)
 
BOOL LoadSoundFiles (HWND hwndDlg)
 
static VOID FreeSoundFiles (HWND hwndDlg)
 
static LRESULT FindSoundFileInList (HWND hwndDlg, LPCWSTR pSoundPath)
 
BOOL ShowSoundScheme (PGLOBAL_DATA pGlobalData, HWND hwndDlg)
 
BOOL ApplyChanges (HWND hwndDlg)
 
HIMAGELIST InitImageList (UINT StartResource, UINT EndResource, UINT Width, UINT Height, ULONG type)
 
static DWORD GetSoundDuration (LPCWSTR pFileName)
 Get the duration of a waveform audio file.
 
static BOOL StartSoundTest (HWND hwndDlg, LPCWSTR pszSound)
 
static BOOL StopSoundTest (HWND hwndDlg)
 
INT_PTR CALLBACK SoundsDlgProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 

Macro Definition Documentation

◆ ID_SOUND_TEST_TIMER

#define ID_SOUND_TEST_TIMER   1

Definition at line 19 of file sounds.c.

Typedef Documentation

◆ APP_MAP

◆ GLOBAL_DATA

◆ LABEL_CONTEXT

◆ LABEL_MAP

◆ PAPP_MAP

◆ PGLOBAL_DATA

◆ PLABEL_CONTEXT

◆ PLABEL_MAP

◆ PSOUND_SCHEME_CONTEXT

◆ SOUND_SCHEME_CONTEXT

Function Documentation

◆ AddSoundProfile()

BOOL AddSoundProfile ( HWND  hwndDlg,
HKEY  hKey,
PCWSTR  szSubKey,
BOOL  SetDefault 
)

Definition at line 353 of file sounds.c.

354{
355 HKEY hSubKey;
356 WCHAR szValue[MAX_PATH];
357 DWORD cbValue, dwResult;
358 LRESULT lResult;
359 PSOUND_SCHEME_CONTEXT pScheme;
360
362 szSubKey,
363 0,
364 KEY_READ,
365 &hSubKey) != ERROR_SUCCESS)
366 {
367 return FALSE;
368 }
369
370 cbValue = sizeof(szValue);
371 dwResult = RegQueryValueExW(hSubKey,
372 NULL,
373 NULL,
374 NULL,
375 (LPBYTE)szValue,
376 &cbValue);
377 RegCloseKey(hSubKey);
378
379 if (dwResult != ERROR_SUCCESS)
380 return FALSE;
381
382 /* Try to add the new profile */
383 lResult = ComboBox_AddString(GetDlgItem(hwndDlg, IDC_SOUND_SCHEME), szValue);
384 if (lResult == CB_ERR)
385 return FALSE;
386
387 /* Allocate the profile scheme buffer */
389 if (pScheme == NULL)
390 {
391 /* We failed to allocate the buffer, no need to keep a dangling string in the combobox */
393 return FALSE;
394 }
395
396 StringCchCopyW(pScheme->szDesc, _countof(pScheme->szDesc), szValue);
397 StringCchCopyW(pScheme->szName, _countof(pScheme->szName), szSubKey);
398
399 /* Associate the value with the item in the combobox */
400 ComboBox_SetItemData(GetDlgItem(hwndDlg, IDC_SOUND_SCHEME), lResult, pScheme);
401
402 /* Optionally, select the profile */
403 if (SetDefault)
404 {
406 }
407
408 return TRUE;
409}
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define IDC_SOUND_SCHEME
Definition: resource.h:38
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define MAX_PATH
Definition: compat.h:34
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
#define KEY_READ
Definition: nt_native.h:1023
#define _countof(array)
Definition: sndvol32.h:68
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
WCHAR szDesc[MAX_PATH]
Definition: sounds.c:51
WCHAR szName[MAX_PATH]
Definition: sounds.c:50
unsigned char * LPBYTE
Definition: typedefs.h:53
LONG_PTR LRESULT
Definition: windef.h:209
#define ComboBox_SetCurSel(hwndCtl, index)
Definition: windowsx.h:66
#define ComboBox_DeleteString(hwndCtl, index)
Definition: windowsx.h:42
#define ComboBox_AddString(hwndCtl, lpsz)
Definition: windowsx.h:41
#define ComboBox_SetItemData(hwndCtl, index, data)
Definition: windowsx.h:69
#define CB_ERR
Definition: winuser.h:2435
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by EnumerateSoundProfiles().

◆ ApplyChanges()

BOOL ApplyChanges ( HWND  hwndDlg)

Definition at line 1018 of file sounds.c.

1019{
1020 HKEY hKey, hSubKey;
1021 DWORD dwType;
1022 LRESULT lIndex;
1023 PSOUND_SCHEME_CONTEXT pScheme;
1024 HWND hDlgCtrl;
1025 PLABEL_CONTEXT pLabelContext;
1026 WCHAR Buffer[100];
1027
1028 hDlgCtrl = GetDlgItem(hwndDlg, IDC_SOUND_SCHEME);
1029
1030 lIndex = SendMessageW(hDlgCtrl, CB_GETCURSEL, 0, 0);
1031 if (lIndex == CB_ERR)
1032 {
1033 return FALSE;
1034 }
1035
1036 lIndex = SendMessageW(hDlgCtrl, CB_GETITEMDATA, (WPARAM)lIndex, 0);
1037 if (lIndex == CB_ERR)
1038 {
1039 return FALSE;
1040 }
1041 pScheme = (PSOUND_SCHEME_CONTEXT)lIndex;
1042
1044 L"AppEvents\\Schemes",
1045 0,
1046 KEY_WRITE,
1047 &hKey) != ERROR_SUCCESS)
1048 {
1049 return FALSE;
1050 }
1051
1052 RegSetValueExW(hKey, NULL, 0, REG_SZ, (LPBYTE)pScheme->szName, (wcslen(pScheme->szName) + 1) * sizeof(WCHAR));
1054
1056 L"AppEvents\\Schemes\\Apps",
1057 0,
1058 KEY_WRITE,
1059 &hKey) != ERROR_SUCCESS)
1060 {
1061 return FALSE;
1062 }
1063
1064 pLabelContext = pScheme->LabelContext;
1065
1066 while (pLabelContext)
1067 {
1068 StringCchPrintfW(Buffer, _countof(Buffer), L"%s\\%s\\.Current", pLabelContext->AppMap->szName, pLabelContext->LabelMap->szName);
1069
1070 if (RegOpenKeyExW(hKey, Buffer, 0, KEY_WRITE, &hSubKey) == ERROR_SUCCESS)
1071 {
1072 dwType = (wcschr(pLabelContext->szValue, L'%') ? REG_EXPAND_SZ : REG_SZ);
1073 RegSetValueExW(hSubKey, NULL, 0, dwType, (LPBYTE)pLabelContext->szValue, (wcslen(pLabelContext->szValue) + 1) * sizeof(WCHAR));
1074 RegCloseKey(hSubKey);
1075 }
1076
1077 pLabelContext = pLabelContext->Next;
1078 }
1080
1082 return TRUE;
1083}
Definition: bufpool.h:45
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
#define wcschr
Definition: compat.h:17
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define REG_SZ
Definition: layer.c:22
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define KEY_WRITE
Definition: nt_native.h:1031
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
#define L(x)
Definition: ntvdm.h:50
#define PSNRET_NOERROR
Definition: prsht.h:129
struct _SOUND_SCHEME_CONTEXT * PSOUND_SCHEME_CONTEXT
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
WCHAR szName[MAX_PATH]
Definition: sounds.c:32
PAPP_MAP AppMap
Definition: sounds.c:43
PLABEL_MAP LabelMap
Definition: sounds.c:42
struct _LABEL_CONTEXT * Next
Definition: sounds.c:45
WCHAR szValue[MAX_PATH]
Definition: sounds.c:44
PWSTR szName
Definition: sounds.c:23
PLABEL_CONTEXT LabelContext
Definition: sounds.c:52
UINT_PTR WPARAM
Definition: windef.h:207
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define CB_GETITEMDATA
Definition: winuser.h:1950
#define DWLP_MSGRESULT
Definition: winuser.h:870
#define CB_GETCURSEL
Definition: winuser.h:1943
#define SetWindowLongPtrW
Definition: winuser.h:5346
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by SepAdjustGroups(), SepAdjustPrivileges(), and SoundsDlgProc().

◆ EnumerateSoundProfiles()

DWORD EnumerateSoundProfiles ( PGLOBAL_DATA  pGlobalData,
HWND  hwndDlg,
HKEY  hKey 
)

Definition at line 413 of file sounds.c.

414{
415 HKEY hSubKey;
416 DWORD dwName, dwCurKey, dwResult, dwNumSchemes;
417 DWORD cbDefault;
419
420 cbDefault = sizeof(pGlobalData->szDefault);
422 NULL,
423 NULL,
424 NULL,
425 (LPBYTE)pGlobalData->szDefault,
426 &cbDefault) != ERROR_SUCCESS)
427 {
428 return FALSE;
429 }
430
432 L"Names",
433 0,
434 KEY_READ,
435 &hSubKey) != ERROR_SUCCESS)
436 {
437 return FALSE;
438 }
439
440 dwNumSchemes = 0;
441 dwCurKey = 0;
442 do
443 {
444 dwName = _countof(szName);
445 dwResult = RegEnumKeyExW(hSubKey,
446 dwCurKey,
447 szName,
448 &dwName,
449 NULL,
450 NULL,
451 NULL,
452 NULL);
453
454 if (dwResult == ERROR_SUCCESS)
455 {
456 if (AddSoundProfile(hwndDlg, hSubKey, szName, (!_wcsicmp(szName, pGlobalData->szDefault))))
457 {
458 dwNumSchemes++;
459 }
460 }
461
462 dwCurKey++;
463 } while (dwResult == ERROR_SUCCESS);
464
465 RegCloseKey(hSubKey);
466 return dwNumSchemes;
467}
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
Definition: reg.c:2504
static const WCHAR szName[]
Definition: powrprof.c:45
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
BOOL AddSoundProfile(HWND hwndDlg, HKEY hKey, PCWSTR szSubKey, BOOL SetDefault)
Definition: sounds.c:353
WCHAR szDefault[MAX_PATH]
Definition: sounds.c:57

Referenced by LoadSoundProfiles().

◆ FindApp()

PAPP_MAP FindApp ( PGLOBAL_DATA  pGlobalData,
PCWSTR  szName 
)

Definition at line 175 of file sounds.c.

176{
177 PAPP_MAP pMap = pGlobalData->pAppMap;
178
179 while (pMap)
180 {
181 if (!wcscmp(pMap->szName, szName))
182 return pMap;
183
184 pMap = pMap->Next;
185
186 }
187 return NULL;
188}
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
struct _APP_MAP * Next
Definition: sounds.c:36
PAPP_MAP pAppMap
Definition: sounds.c:60

Referenced by FindLabelContext().

◆ FindLabel()

PLABEL_MAP FindLabel ( PGLOBAL_DATA  pGlobalData,
PAPP_MAP  pAppMap,
PCWSTR  szName 
)

Definition at line 85 of file sounds.c.

86{
87 PLABEL_MAP pMap = pGlobalData->pLabelMap;
88
89 while (pMap)
90 {
91 ASSERT(pMap);
92 ASSERT(pMap->szName);
93 if (!wcscmp(pMap->szName, szName))
94 return pMap;
95
96 pMap = pMap->Next;
97 }
98
99 pMap = pAppMap->LabelMap;
100
101 while (pMap)
102 {
103 ASSERT(pMap);
104 ASSERT(pMap->szName);
105 if (!wcscmp(pMap->szName, szName))
106 return pMap;
107
108 pMap = pMap->Next;
109 }
110
112 if (!pMap)
113 return NULL;
114
115 pMap->szName = pMap->szDesc = _wcsdup(szName);
116 if (!pMap->szName)
117 {
118 HeapFree(GetProcessHeap(), 0, pMap);
119 return NULL;
120 }
121
122 pMap->AppMap = pAppMap;
123 pMap->Next = pGlobalData->pLabelMap;
124 pGlobalData->pLabelMap = pMap;
125
126 return pMap;
127}
#define HeapFree(x, y, z)
Definition: compat.h:735
#define ASSERT(a)
Definition: mode.c:44
_Check_return_ _CRTIMP wchar_t *__cdecl _wcsdup(_In_z_ const wchar_t *_Str)
PLABEL_MAP LabelMap
Definition: sounds.c:37
PLABEL_MAP pLabelMap
Definition: sounds.c:59
PWSTR szDesc
Definition: sounds.c:24
struct _APP_MAP * AppMap
Definition: sounds.c:26
struct _LABEL_MAP * Next
Definition: sounds.c:27

Referenced by FindLabelContext(), and ImportSoundEntry().

◆ FindLabelContext()

PLABEL_CONTEXT FindLabelContext ( PGLOBAL_DATA  pGlobalData,
PSOUND_SCHEME_CONTEXT  pSoundScheme,
PCWSTR  AppName,
PCWSTR  LabelName 
)

Definition at line 204 of file sounds.c.

205{
206 PLABEL_CONTEXT pLabelContext;
207
208 pLabelContext = pSoundScheme->LabelContext;
209
210 while (pLabelContext)
211 {
212 ASSERT(pLabelContext->AppMap);
213 ASSERT(pLabelContext->LabelMap);
214
215 if (!_wcsicmp(pLabelContext->AppMap->szName, AppName) && !_wcsicmp(pLabelContext->LabelMap->szName, LabelName))
216 {
217 return pLabelContext;
218 }
219 pLabelContext = pLabelContext->Next;
220 }
221
222 pLabelContext = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LABEL_CONTEXT));
223 if (!pLabelContext)
224 return NULL;
225
226 pLabelContext->AppMap = FindApp(pGlobalData, AppName);
227 pLabelContext->LabelMap = FindLabel(pGlobalData, pLabelContext->AppMap, LabelName);
228 ASSERT(pLabelContext->AppMap);
229 ASSERT(pLabelContext->LabelMap);
230 pLabelContext->szValue[0] = UNICODE_NULL;
231 pLabelContext->Next = pSoundScheme->LabelContext;
232 pSoundScheme->LabelContext = pLabelContext;
233
234 return pLabelContext;
235}
@ LabelName
Definition: asmpp.cpp:94
static CHAR AppName[MAX_PATH]
Definition: dem.c:252
#define UNICODE_NULL
PAPP_MAP FindApp(PGLOBAL_DATA pGlobalData, PCWSTR szName)
Definition: sounds.c:175
PLABEL_MAP FindLabel(PGLOBAL_DATA pGlobalData, PAPP_MAP pAppMap, PCWSTR szName)
Definition: sounds.c:85

Referenced by ImportSoundLabel(), and ShowSoundScheme().

◆ FindSoundFileInList()

static LRESULT FindSoundFileInList ( HWND  hwndDlg,
LPCWSTR  pSoundPath 
)
static

Definition at line 905 of file sounds.c.

906{
907 LRESULT lCount, lIndex, lResult;
908 LPWSTR pszPath;
909 HWND hwndComboBox;
910
911 hwndComboBox = GetDlgItem(hwndDlg, IDC_SOUND_LIST);
912 lCount = ComboBox_GetCount(hwndComboBox);
913 if (lCount == CB_ERR)
914 return CB_ERR;
915
916 for (lIndex = 0; lIndex < lCount; lIndex++)
917 {
918 lResult = ComboBox_GetItemData(hwndComboBox, lIndex);
919 if (lResult == CB_ERR || lResult == 0)
920 continue;
921
922 pszPath = (LPWSTR)lResult;
923 if (_wcsicmp(pszPath, pSoundPath) == 0)
924 return lIndex;
925 }
926
927 return CB_ERR;
928}
#define IDC_SOUND_LIST
Definition: resource.h:40
#define ComboBox_GetItemData(hwndCtl, index)
Definition: windowsx.h:54
#define ComboBox_GetCount(hwndCtl)
Definition: windowsx.h:48
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by SoundsDlgProc().

◆ FindSoundProfile()

PSOUND_SCHEME_CONTEXT FindSoundProfile ( HWND  hwndDlg,
PCWSTR  szName 
)

Definition at line 470 of file sounds.c.

471{
472 LRESULT lCount, lIndex, lResult;
473 PSOUND_SCHEME_CONTEXT pScheme;
474 HWND hwndComboBox;
475
476 hwndComboBox = GetDlgItem(hwndDlg, IDC_SOUND_SCHEME);
477 lCount = ComboBox_GetCount(hwndComboBox);
478 if (lCount == CB_ERR)
479 {
480 return NULL;
481 }
482
483 for (lIndex = 0; lIndex < lCount; lIndex++)
484 {
485 lResult = ComboBox_GetItemData(hwndComboBox, lIndex);
486 if (lResult == CB_ERR)
487 {
488 continue;
489 }
490
491 pScheme = (PSOUND_SCHEME_CONTEXT)lResult;
492 if (!_wcsicmp(pScheme->szName, szName))
493 {
494 return pScheme;
495 }
496 }
497 return NULL;
498}

Referenced by ImportSoundLabel().

◆ FreeAppMap()

static VOID FreeAppMap ( PGLOBAL_DATA  pGlobalData)
static

Definition at line 192 of file sounds.c.

193{
194 PAPP_MAP pCurMap;
195
196 while (pGlobalData->pAppMap)
197 {
198 pCurMap = pGlobalData->pAppMap->Next;
199 HeapFree(GetProcessHeap(), 0, pGlobalData->pAppMap);
200 pGlobalData->pAppMap = pCurMap;
201 }
202}

Referenced by SoundsDlgProc().

◆ FreeLabelMap()

static VOID FreeLabelMap ( PGLOBAL_DATA  pGlobalData)
static

Definition at line 153 of file sounds.c.

154{
155 PLABEL_MAP pCurMap;
156
157 while (pGlobalData->pLabelMap)
158 {
159 pCurMap = pGlobalData->pLabelMap->Next;
160
161 /* Prevent double freeing (for "FindLabel") */
162 if (pGlobalData->pLabelMap->szName != pGlobalData->pLabelMap->szDesc)
163 {
164 free(pGlobalData->pLabelMap->szName);
165 }
166
167 free(pGlobalData->pLabelMap->szDesc);
168 free(pGlobalData->pLabelMap->szIcon);
169
170 HeapFree(GetProcessHeap(), 0, pGlobalData->pLabelMap);
171 pGlobalData->pLabelMap = pCurMap;
172 }
173}
#define free
Definition: debug_ros.c:5
PWSTR szIcon
Definition: sounds.c:25

Referenced by SoundsDlgProc().

◆ FreeSoundFiles()

static VOID FreeSoundFiles ( HWND  hwndDlg)
static

Definition at line 879 of file sounds.c.

880{
881 LRESULT lCount, lIndex, lResult;
882 PWSTR pSoundPath;
883 HWND hwndComboBox;
884
885 hwndComboBox = GetDlgItem(hwndDlg, IDC_SOUND_LIST);
886 lCount = ComboBox_GetCount(hwndComboBox);
887 if (lCount == CB_ERR)
888 return;
889
890 for (lIndex = 0; lIndex < lCount; lIndex++)
891 {
892 lResult = ComboBox_GetItemData(hwndComboBox, lIndex);
893 if (lResult == CB_ERR)
894 {
895 continue;
896 }
897
898 pSoundPath = (PWSTR)lResult;
899 free(pSoundPath);
900 }
901}
uint16_t * PWSTR
Definition: typedefs.h:56

Referenced by SoundsDlgProc().

◆ FreeSoundProfiles()

static VOID FreeSoundProfiles ( HWND  hwndDlg)
static

Definition at line 502 of file sounds.c.

503{
504 LRESULT lCount, lIndex, lResult;
505 PSOUND_SCHEME_CONTEXT pScheme;
506 PLABEL_CONTEXT pLabelContext;
507 HWND hwndComboBox;
508
509 hwndComboBox = GetDlgItem(hwndDlg, IDC_SOUND_SCHEME);
510 lCount = ComboBox_GetCount(hwndComboBox);
511 if (lCount == CB_ERR)
512 return;
513
514 for (lIndex = 0; lIndex < lCount; lIndex++)
515 {
516 lResult = ComboBox_GetItemData(hwndComboBox, lIndex);
517 if (lResult == CB_ERR)
518 {
519 continue;
520 }
521
522 pScheme = (PSOUND_SCHEME_CONTEXT)lResult;
523
524 while (pScheme->LabelContext)
525 {
526 pLabelContext = pScheme->LabelContext->Next;
527 HeapFree(GetProcessHeap(), 0, pScheme->LabelContext);
528 pScheme->LabelContext = pLabelContext;
529 }
530
531 HeapFree(GetProcessHeap(), 0, pScheme);
532 }
533}

Referenced by SoundsDlgProc().

◆ GetSoundDuration()

static DWORD GetSoundDuration ( LPCWSTR  pFileName)
static

Get the duration of a waveform audio file.

Parameters
[in]pFileNameThe file name or full path of the file.
Returns
The duration of the sound, in milliseconds. Returns 0 in case of failure.

Definition at line 1160 of file sounds.c.

1161{
1162 MCI_OPEN_PARMSW openParms;
1163 MCI_GENERIC_PARMS closeParms;
1164 MCI_SET_PARMS setParms;
1165 MCI_STATUS_PARMS statusParms;
1166 MCIERROR mciError;
1167
1168 ZeroMemory(&openParms, sizeof(openParms));
1169 openParms.lpstrDeviceType = L"waveaudio";
1170 openParms.lpstrElementName = pFileName;
1171
1172 mciError = mciSendCommandW(0,
1173 MCI_OPEN,
1175 (DWORD_PTR)&openParms);
1176 if (mciError != 0)
1177 return 0;
1178
1179 ZeroMemory(&setParms, sizeof(setParms));
1181
1182 mciError = mciSendCommandW(openParms.wDeviceID,
1183 MCI_SET,
1185 (DWORD_PTR)&setParms);
1186 if (mciError == 0)
1187 {
1188 ZeroMemory(&statusParms, sizeof(statusParms));
1189 statusParms.dwItem = MCI_STATUS_LENGTH;
1190
1191 mciError = mciSendCommandW(openParms.wDeviceID,
1192 MCI_STATUS,
1194 (DWORD_PTR)&statusParms);
1195 }
1196
1197 closeParms.dwCallback = 0;
1198 mciSendCommandW(openParms.wDeviceID, MCI_CLOSE, MCI_WAIT, (DWORD_PTR)&closeParms);
1199
1200 if (mciError != 0)
1201 return 0;
1202
1203 return statusParms.dwReturn;
1204}
DWORD WINAPI mciSendCommandW(MCIDEVICEID wDevID, UINT wMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
Definition: mci.c:2273
#define MCI_OPEN_ELEMENT
Definition: mmsystem.h:735
#define MCI_FORMAT_MILLISECONDS
Definition: mmsystem.h:701
#define MCI_STATUS
Definition: mmsystem.h:662
#define MCI_SET
Definition: mmsystem.h:656
DWORD MCIERROR
Definition: mmsystem.h:958
#define MCI_CLOSE
Definition: mmsystem.h:647
#define MCI_SET_TIME_FORMAT
Definition: mmsystem.h:774
#define MCI_OPEN
Definition: mmsystem.h:646
#define MCI_STATUS_LENGTH
Definition: mmsystem.h:744
#define MCI_WAIT
Definition: mmsystem.h:730
#define MCI_OPEN_TYPE
Definition: mmsystem.h:739
#define MCI_STATUS_ITEM
Definition: mmsystem.h:742
DWORD_PTR dwCallback
Definition: mmsystem.h:1517
LPCWSTR lpstrDeviceType
Definition: mmsystem.h:1531
LPCWSTR lpstrElementName
Definition: mmsystem.h:1532
MCIDEVICEID wDeviceID
Definition: mmsystem.h:1530
DWORD dwTimeFormat
Definition: mmsystem.h:1608
DWORD_PTR dwReturn
Definition: mmsystem.h:1567
uint32_t DWORD_PTR
Definition: typedefs.h:65
#define ZeroMemory
Definition: winbase.h:1712

Referenced by StartSoundTest().

◆ ImportAppProfile()

DWORD ImportAppProfile ( PGLOBAL_DATA  pGlobalData,
HWND  hwndDlg,
HKEY  hKey,
PCWSTR  szAppName 
)

Definition at line 656 of file sounds.c.

657{
658 HKEY hSubKey;
659 WCHAR szDefault[MAX_PATH];
660 DWORD cbValue;
661 DWORD dwCurKey;
662 DWORD dwResult;
663 DWORD dwNumEntry;
664 DWORD dwName;
666 WCHAR szIcon[MAX_PATH];
667 PAPP_MAP AppMap;
668
669 AppMap = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(APP_MAP));
670 if (!AppMap)
671 return 0;
672
674 szAppName,
675 0,
676 KEY_READ,
677 &hSubKey) != ERROR_SUCCESS)
678 {
679 HeapFree(GetProcessHeap(), 0, AppMap);
680 return 0;
681 }
682
683 cbValue = sizeof(szDefault);
684 if (RegQueryValueExW(hSubKey,
685 NULL,
686 NULL,
687 NULL,
688 (LPBYTE)szDefault,
689 &cbValue) != ERROR_SUCCESS)
690 {
691 RegCloseKey(hSubKey);
692 HeapFree(GetProcessHeap(), 0, AppMap);
693 return 0;
694 }
695
696 cbValue = sizeof(szIcon);
697 if (RegQueryValueExW(hSubKey,
698 L"DispFileName",
699 NULL,
700 NULL,
701 (LPBYTE)szIcon,
702 &cbValue) != ERROR_SUCCESS)
703 {
704 szIcon[0] = UNICODE_NULL;
705 }
706
707 /* initialize app map */
708 StringCchCopyW(AppMap->szName, _countof(AppMap->szName), szAppName);
709 StringCchCopyW(AppMap->szDesc, _countof(AppMap->szDesc), szDefault);
710 StringCchCopyW(AppMap->szIcon, _countof(AppMap->szIcon), szIcon);
711
712 AppMap->Next = pGlobalData->pAppMap;
713 pGlobalData->pAppMap = AppMap;
714
715
716 dwCurKey = 0;
717 dwNumEntry = 0;
718 do
719 {
720 dwName = _countof(szName);
721 dwResult = RegEnumKeyExW(hSubKey,
722 dwCurKey,
723 szName,
724 &dwName,
725 NULL,
726 NULL,
727 NULL,
728 NULL);
729 if (dwResult == ERROR_SUCCESS)
730 {
731 if (ImportSoundEntry(pGlobalData, hwndDlg, hSubKey, szName, szAppName, AppMap))
732 {
733 dwNumEntry++;
734 }
735 }
736 dwCurKey++;
737 } while (dwResult == ERROR_SUCCESS);
738
739 RegCloseKey(hSubKey);
740 return dwNumEntry;
741}
TCHAR szAppName[128]
Definition: solitaire.cpp:18
DWORD ImportSoundEntry(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, PCWSTR szLabelName, PCWSTR szAppName, PAPP_MAP pAppMap)
Definition: sounds.c:597
WCHAR szDesc[MAX_PATH]
Definition: sounds.c:33
WCHAR szIcon[MAX_PATH]
Definition: sounds.c:34

Referenced by ImportSoundProfiles().

◆ ImportSoundEntry()

DWORD ImportSoundEntry ( PGLOBAL_DATA  pGlobalData,
HWND  hwndDlg,
HKEY  hKey,
PCWSTR  szLabelName,
PCWSTR  szAppName,
PAPP_MAP  pAppMap 
)

Definition at line 597 of file sounds.c.

598{
599 HKEY hSubKey;
600 DWORD dwNumProfiles;
601 DWORD dwCurKey;
602 DWORD dwResult;
603 DWORD dwProfile;
604 WCHAR szProfile[MAX_PATH];
605 PLABEL_MAP pLabel;
606
608 szLabelName,
609 0,
610 KEY_READ,
611 &hSubKey) != ERROR_SUCCESS)
612 {
613 return FALSE;
614 }
615 pLabel = FindLabel(pGlobalData, pAppMap, szLabelName);
616
617 ASSERT(pLabel);
618 RemoveLabel(pGlobalData, pLabel);
619
620 pLabel->AppMap = pAppMap;
621 pLabel->Next = pAppMap->LabelMap;
622 pAppMap->LabelMap = pLabel;
623
624 dwNumProfiles = 0;
625 dwCurKey = 0;
626 do
627 {
628 dwProfile = _countof(szProfile);
629 dwResult = RegEnumKeyExW(hSubKey,
630 dwCurKey,
631 szProfile,
632 &dwProfile,
633 NULL,
634 NULL,
635 NULL,
636 NULL);
637
638 if (dwResult == ERROR_SUCCESS)
639 {
640 if (ImportSoundLabel(pGlobalData, hwndDlg, hSubKey, szProfile, szLabelName, szAppName, pAppMap, pLabel))
641 {
642 dwNumProfiles++;
643 }
644 }
645
646 dwCurKey++;
647 } while (dwResult == ERROR_SUCCESS);
648
649 RegCloseKey(hSubKey);
650
651 return dwNumProfiles;
652}
VOID RemoveLabel(PGLOBAL_DATA pGlobalData, PLABEL_MAP pMap)
Definition: sounds.c:130
BOOL ImportSoundLabel(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, PCWSTR szProfile, PCWSTR szLabelName, PCWSTR szAppName, PAPP_MAP AppMap, PLABEL_MAP LabelMap)
Definition: sounds.c:536

Referenced by ImportAppProfile().

◆ ImportSoundLabel()

BOOL ImportSoundLabel ( PGLOBAL_DATA  pGlobalData,
HWND  hwndDlg,
HKEY  hKey,
PCWSTR  szProfile,
PCWSTR  szLabelName,
PCWSTR  szAppName,
PAPP_MAP  AppMap,
PLABEL_MAP  LabelMap 
)

Definition at line 536 of file sounds.c.

537{
538 HKEY hSubKey;
539 WCHAR szValue[MAX_PATH];
540 WCHAR szBuffer[MAX_PATH];
541 DWORD cbValue, cchLength;
542 PSOUND_SCHEME_CONTEXT pScheme;
543 PLABEL_CONTEXT pLabelContext;
544 BOOL bCurrentProfile, bActiveProfile;
545
546 bCurrentProfile = !_wcsicmp(szProfile, L".Current");
547 bActiveProfile = !_wcsicmp(szProfile, pGlobalData->szDefault);
548
550 szProfile,
551 0,
552 KEY_READ,
553 &hSubKey) != ERROR_SUCCESS)
554 {
555 return FALSE;
556 }
557
558 cbValue = sizeof(szValue);
559 if (RegQueryValueExW(hSubKey,
560 NULL,
561 NULL,
562 NULL,
563 (LPBYTE)szValue,
564 &cbValue) != ERROR_SUCCESS)
565 {
566 return FALSE;
567 }
568
569 if (bCurrentProfile)
570 pScheme = FindSoundProfile(hwndDlg, pGlobalData->szDefault);
571 else
572 pScheme = FindSoundProfile(hwndDlg, szProfile);
573
574 if (!pScheme)
575 {
576 return FALSE;
577 }
578 pLabelContext = FindLabelContext(pGlobalData, pScheme, AppMap->szName, LabelMap->szName);
579
580 cchLength = ExpandEnvironmentStringsW(szValue, szBuffer, _countof(szBuffer));
581 if (cchLength == 0 || cchLength > _countof(szBuffer))
582 {
583 /* fixme */
584 return FALSE;
585 }
586
587 if (bCurrentProfile)
588 StringCchCopyW(pLabelContext->szValue, _countof(pLabelContext->szValue), szBuffer);
589 else if (!bActiveProfile)
590 StringCchCopyW(pLabelContext->szValue, _countof(pLabelContext->szValue), szBuffer);
591
592 return TRUE;
593}
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
unsigned int BOOL
Definition: ntddk_ex.h:94
PLABEL_CONTEXT FindLabelContext(PGLOBAL_DATA pGlobalData, PSOUND_SCHEME_CONTEXT pSoundScheme, PCWSTR AppName, PCWSTR LabelName)
Definition: sounds.c:204
PSOUND_SCHEME_CONTEXT FindSoundProfile(HWND hwndDlg, PCWSTR szName)
Definition: sounds.c:470

Referenced by ImportSoundEntry().

◆ ImportSoundProfiles()

BOOL ImportSoundProfiles ( PGLOBAL_DATA  pGlobalData,
HWND  hwndDlg,
HKEY  hKey 
)

Definition at line 745 of file sounds.c.

746{
747 DWORD dwCurKey;
748 DWORD dwResult;
749 DWORD dwNumApps;
751 HKEY hSubKey;
752
754 L"Apps",
755 0,
756 KEY_READ,
757 &hSubKey) != ERROR_SUCCESS)
758 {
759 return FALSE;
760 }
761
762 dwNumApps = 0;
763 dwCurKey = 0;
764 do
765 {
766 dwResult = RegEnumKeyW(hSubKey,
767 dwCurKey,
768 szName,
770
771 if (dwResult == ERROR_SUCCESS)
772 {
773 if (ImportAppProfile(pGlobalData, hwndDlg, hSubKey, szName))
774 {
775 dwNumApps++;
776 }
777 }
778 dwCurKey++;
779 } while (dwResult == ERROR_SUCCESS);
780
781 RegCloseKey(hSubKey);
782
783 return (dwNumApps != 0);
784}
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
Definition: reg.c:2393
DWORD ImportAppProfile(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey, PCWSTR szAppName)
Definition: sounds.c:656

Referenced by LoadSoundProfiles().

◆ InitImageList()

HIMAGELIST InitImageList ( UINT  StartResource,
UINT  EndResource,
UINT  Width,
UINT  Height,
ULONG  type 
)

Definition at line 1087 of file sounds.c.

1092{
1093 HANDLE hImage;
1095 UINT i;
1096 INT ret;
1097
1098 /* Create the toolbar icon image list */
1100 Height,
1102 EndResource - StartResource,
1103 0);
1104 if (himl == NULL)
1105 return NULL;
1106
1107 ret = 0;
1108 for (i = StartResource; i <= EndResource && ret != -1; i++)
1109 {
1110 hImage = LoadImageW(hApplet,
1112 type,
1113 Width,
1114 Height,
1116 if (hImage == NULL)
1117 {
1118 ret = -1;
1119 break;
1120 }
1121
1122 if (type == IMAGE_BITMAP)
1123 {
1125 hImage,
1126 RGB(255, 0, 128));
1127 }
1128 else if (type == IMAGE_ICON)
1129 {
1131 hImage);
1132 }
1133
1134 DeleteObject(hImage);
1135 }
1136
1137 if (ret == -1)
1138 {
1140 himl = NULL;
1141 }
1142
1143 return himl;
1144}
HIMAGELIST himl
HINSTANCE hApplet
Definition: access.c:17
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
Definition: imagelist.c:928
INT WINAPI ImageList_AddMasked(HIMAGELIST himl, HBITMAP hBitmap, COLORREF clrMask)
Definition: imagelist.c:563
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
Definition: imagelist.c:804
#define RGB(r, g, b)
Definition: precomp.h:71
pKey DeleteObject()
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: ndis.h:50
#define ILC_COLOR32
Definition: commctrl.h:358
#define ImageList_AddIcon(himl, hicon)
Definition: commctrl.h:415
#define ILC_MASK
Definition: commctrl.h:351
int32_t INT
Definition: typedefs.h:58
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:89
_In_ HFONT _Out_ PUINT Height
Definition: font.h:88
int ret
#define IMAGE_BITMAP
Definition: winuser.h:211
#define LR_LOADTRANSPARENT
Definition: winuser.h:1093
#define IMAGE_ICON
Definition: winuser.h:212
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
Definition: cursoricon.c:2203
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582

Referenced by SoundsDlgProc().

◆ LoadEventLabel()

BOOL LoadEventLabel ( PGLOBAL_DATA  pGlobalData,
HKEY  hKey,
PCWSTR  szSubKey 
)

Definition at line 239 of file sounds.c.

240{
241 HKEY hSubKey;
242 DWORD cbValue;
243 WCHAR szDesc[MAX_PATH];
244 WCHAR szData[MAX_PATH];
245 PLABEL_MAP pMap;
246
248 szSubKey,
249 0,
250 KEY_READ,
251 &hSubKey) != ERROR_SUCCESS)
252 {
253 return FALSE;
254 }
255
256 cbValue = sizeof(szDesc);
257 if (RegQueryValueExW(hSubKey,
258 NULL,
259 NULL,
260 NULL,
261 (LPBYTE)szDesc,
262 &cbValue) != ERROR_SUCCESS)
263 {
264 RegCloseKey(hSubKey);
265 return FALSE;
266 }
267
268 cbValue = sizeof(szData);
269 if (RegQueryValueExW(hSubKey,
270 L"DispFileName",
271 NULL,
272 NULL,
273 (LPBYTE)szData,
274 &cbValue) != ERROR_SUCCESS)
275 {
276 RegCloseKey(hSubKey);
277 return FALSE;
278 }
279
281 if (!pMap)
282 {
283 return FALSE;
284 }
285
286 pMap->szName = _wcsdup(szSubKey);
287 pMap->szDesc = _wcsdup(szDesc);
288 pMap->szIcon = _wcsdup(szData);
289
290 if (pGlobalData->pLabelMap)
291 {
292 pMap->Next = pGlobalData->pLabelMap;
293 pGlobalData->pLabelMap = pMap;
294 }
295 else
296 {
297 pGlobalData->pLabelMap = pMap;
298 pGlobalData->pLabelMap->Next = NULL;
299 }
300 return TRUE;
301}

Referenced by LoadEventLabels().

◆ LoadEventLabels()

BOOL LoadEventLabels ( PGLOBAL_DATA  pGlobalData)

Definition at line 305 of file sounds.c.

306{
307 HKEY hSubKey;
308 DWORD dwCurKey;
310 DWORD dwName;
311 DWORD dwResult;
312 DWORD dwCount;
314 L"AppEvents\\EventLabels",
315 0,
316 KEY_READ,
317 &hSubKey) != ERROR_SUCCESS)
318 {
319 return FALSE;
320 }
321
322 dwCurKey = 0;
323 dwCount = 0;
324 do
325 {
326 dwName = _countof(szName);
327 dwResult = RegEnumKeyExW(hSubKey,
328 dwCurKey,
329 szName,
330 &dwName,
331 NULL,
332 NULL,
333 NULL,
334 NULL);
335
336 if (dwResult == ERROR_SUCCESS)
337 {
338 if (LoadEventLabel(pGlobalData, hSubKey, szName))
339 {
340 dwCount++;
341 }
342 }
343 dwCurKey++;
344
345 } while (dwResult == ERROR_SUCCESS);
346
347 RegCloseKey(hSubKey);
348 return (dwCount != 0);
349}
BOOL LoadEventLabel(PGLOBAL_DATA pGlobalData, HKEY hKey, PCWSTR szSubKey)
Definition: sounds.c:239

Referenced by SoundsDlgProc().

◆ LoadSoundFiles()

BOOL LoadSoundFiles ( HWND  hwndDlg)

Definition at line 816 of file sounds.c.

817{
818 WCHAR szList[256];
820 PWSTR ptr;
823 LRESULT lResult;
824 UINT length;
825
826 /* Add no sound listview item */
827 if (LoadStringW(hApplet, IDS_NO_SOUND, szList, _countof(szList)))
828 {
829 szList[_countof(szList) - 1] = UNICODE_NULL;
831 }
832
833 /* Load sound files */
835 if (length == 0 || length >= _countof(szPath) - CONST_STR_LEN(L"\\media\\*"))
836 {
837 return FALSE;
838 }
839
840 //PathCchAppend(szPath, _countof(szPath), L"media\\*");
841 StringCchCatW(szPath, _countof(szPath), L"\\media\\*");
842
845 {
846 return FALSE;
847 }
848
849 do
850 {
851 if (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
852 continue;
853
854 ptr = wcsrchr(FileData.cFileName, L'\\');
855 if (ptr)
856 {
857 ptr++;
858 }
859 else
860 {
861 ptr = FileData.cFileName;
862 }
863 lResult = SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_ADDSTRING, 0, (LPARAM)ptr);
864 if (lResult != CB_ERR)
865 {
866 StringCchCopyW(szPath + (length + CONST_STR_LEN(L"\\media\\")),
867 _countof(szPath) - (length + CONST_STR_LEN(L"\\media\\")),
868 FileData.cFileName);
870 }
871 } while (FindNextFileW(hFile, &FileData) != 0);
872
874 return TRUE;
875}
static FILEDATA FileData[MAX_FDS]
Definition: fs.c:51
#define IDS_NO_SOUND
Definition: resource.h:90
#define wcsrchr
Definition: compat.h:16
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
UINT WINAPI GetWindowsDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
Definition: path.c:2352
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
LPCWSTR szPath
Definition: env.c:37
static PVOID ptr
Definition: dispmode.c:27
_In_ HANDLE hFile
Definition: mswsock.h:90
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define CONST_STR_LEN(str)
Definition: procpage.c:19
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:325
LONG_PTR LPARAM
Definition: windef.h:208
#define CB_SETITEMDATA
Definition: winuser.h:1966
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define CB_ADDSTRING
Definition: winuser.h:1936

Referenced by SoundsDlgProc().

◆ LoadSoundProfiles()

BOOL LoadSoundProfiles ( PGLOBAL_DATA  pGlobalData,
HWND  hwndDlg 
)

Definition at line 788 of file sounds.c.

789{
790 HKEY hSubKey;
791 DWORD dwNumSchemes;
792
794 L"AppEvents\\Schemes",
795 0,
796 KEY_READ,
797 &hSubKey) != ERROR_SUCCESS)
798 {
799 return FALSE;
800 }
801
802 dwNumSchemes = EnumerateSoundProfiles(pGlobalData, hwndDlg, hSubKey);
803
804
805 if (dwNumSchemes)
806 {
807 ImportSoundProfiles(pGlobalData, hwndDlg, hSubKey);
808 }
809
810 RegCloseKey(hSubKey);
811 return FALSE;
812}
DWORD EnumerateSoundProfiles(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey)
Definition: sounds.c:413
BOOL ImportSoundProfiles(PGLOBAL_DATA pGlobalData, HWND hwndDlg, HKEY hKey)
Definition: sounds.c:745

Referenced by SoundsDlgProc().

◆ MakeFilter()

LPWSTR MakeFilter ( LPWSTR  psz)

Definition at line 68 of file sounds.c.

69{
70 PWCHAR pch;
71
72 ASSERT(psz[0] != UNICODE_NULL &&
73 psz[wcslen(psz) - 1] == L'|');
74 for (pch = psz; *pch != UNICODE_NULL; pch++)
75 {
76 /* replace vertical bar with NULL */
77 if (*pch == L'|')
78 {
80 }
81 }
82 return psz;
83}
#define pch(ap)
Definition: match.c:418
uint16_t * PWCHAR
Definition: typedefs.h:56

Referenced by SoundsDlgProc().

◆ RemoveLabel()

VOID RemoveLabel ( PGLOBAL_DATA  pGlobalData,
PLABEL_MAP  pMap 
)

Definition at line 130 of file sounds.c.

131{
132 PLABEL_MAP pCurMap = pGlobalData->pLabelMap;
133
134 if (pCurMap == pMap)
135 {
136 pGlobalData->pLabelMap = pGlobalData->pLabelMap->Next;
137 return;
138 }
139
140 while (pCurMap)
141 {
142 if (pCurMap->Next == pMap)
143 {
144 pCurMap->Next = pCurMap->Next->Next;
145 return;
146 }
147 pCurMap = pCurMap->Next;
148 }
149}
HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSETSTG *rgelt, [out] ULONG *pceltFetched)

Referenced by ImportSoundEntry().

◆ ShowSoundScheme()

BOOL ShowSoundScheme ( PGLOBAL_DATA  pGlobalData,
HWND  hwndDlg 
)

Definition at line 931 of file sounds.c.

932{
933 LRESULT lIndex;
934 PSOUND_SCHEME_CONTEXT pScheme;
935 PAPP_MAP pAppMap;
936 PLABEL_MAP pLabelMap;
937 PLABEL_CONTEXT pLabelContext;
938 HWND hDlgCtrl, hList;
939 TVINSERTSTRUCTW tvItem;
940 HTREEITEM hTreeItem;
941
942 hDlgCtrl = GetDlgItem(hwndDlg, IDC_SOUND_SCHEME);
943 hList = GetDlgItem(hwndDlg, IDC_SCHEME_LIST);
944
945 if (pGlobalData->hSoundsImageList != NULL)
946 {
948 }
949
950 lIndex = SendMessageW(hDlgCtrl, CB_GETCURSEL, 0, 0);
951 if (lIndex == CB_ERR)
952 {
953 return FALSE;
954 }
955
956 lIndex = SendMessageW(hDlgCtrl, CB_GETITEMDATA, (WPARAM)lIndex, 0);
957 if (lIndex == CB_ERR)
958 {
959 return FALSE;
960 }
961 pScheme = (PSOUND_SCHEME_CONTEXT)lIndex;
962
963 StringCchCopyW(pGlobalData->szDefault, _countof(pGlobalData->szDefault), pScheme->szName);
964
965 pAppMap = pGlobalData->pAppMap;
966 while (pAppMap)
967 {
968 ZeroMemory(&tvItem, sizeof(tvItem));
969 tvItem.hParent = TVI_ROOT;
970 tvItem.hInsertAfter = TVI_FIRST;
971
973 tvItem.item.state = TVIS_EXPANDED;
974 tvItem.item.stateMask = TVIS_EXPANDED;
975 tvItem.item.pszText = pAppMap->szDesc;
976 tvItem.item.iImage = IMAGE_SOUND_SECTION;
977 tvItem.item.iSelectedImage = IMAGE_SOUND_SECTION;
978 tvItem.item.lParam = (LPARAM)NULL;
979
980 hTreeItem = TreeView_InsertItem(hList, &tvItem);
981
982 pLabelMap = pAppMap->LabelMap;
983 while (pLabelMap)
984 {
985 pLabelContext = FindLabelContext(pGlobalData, pScheme, pAppMap->szName, pLabelMap->szName);
986
987 ZeroMemory(&tvItem, sizeof(tvItem));
988 tvItem.hParent = hTreeItem;
989 tvItem.hInsertAfter = TVI_SORT;
990
992 tvItem.item.state = TVIS_EXPANDED;
993 tvItem.item.stateMask = TVIS_EXPANDED;
994 tvItem.item.pszText = pLabelMap->szDesc;
995 if (pLabelContext->szValue && wcslen(pLabelContext->szValue) > 0)
996 {
997 tvItem.item.iImage = IMAGE_SOUND_ASSIGNED;
998 tvItem.item.iSelectedImage = IMAGE_SOUND_ASSIGNED;
999 }
1000 else
1001 {
1002 tvItem.item.iImage = IMAGE_SOUND_NONE;
1003 tvItem.item.iSelectedImage = IMAGE_SOUND_NONE;
1004 }
1005 tvItem.item.lParam = (LPARAM)FindLabelContext(pGlobalData, pScheme, pAppMap->szName, pLabelMap->szName);
1006
1007 TreeView_InsertItem(hList, &tvItem);
1008
1009 pLabelMap = pLabelMap->Next;
1010 }
1011 pAppMap = pAppMap->Next;
1012 }
1013 return TRUE;
1014}
#define IMAGE_SOUND_NONE
Definition: resource.h:96
#define IMAGE_SOUND_ASSIGNED
Definition: resource.h:95
#define IDC_SCHEME_LIST
Definition: resource.h:39
#define IMAGE_SOUND_SECTION
Definition: resource.h:94
HWND hList
Definition: livecd.c:10
#define TVIF_TEXT
Definition: commctrl.h:3266
#define TVIF_IMAGE
Definition: commctrl.h:3267
#define TVSIL_NORMAL
Definition: commctrl.h:3443
#define TVI_FIRST
Definition: commctrl.h:3369
#define TVI_ROOT
Definition: commctrl.h:3368
#define TVIS_EXPANDED
Definition: commctrl.h:3284
#define TVI_SORT
Definition: commctrl.h:3371
#define TVIF_PARAM
Definition: commctrl.h:3268
#define TreeView_SetImageList(hwnd, himl, iImage)
Definition: commctrl.h:3447
#define TreeView_InsertItem(hwnd, lpis)
Definition: commctrl.h:3412
#define TVIF_SELECTEDIMAGE
Definition: commctrl.h:3271
#define TVIF_STATE
Definition: commctrl.h:3269
HIMAGELIST hSoundsImageList
Definition: sounds.c:58
HTREEITEM hParent
Definition: commctrl.h:3393
HTREEITEM hInsertAfter
Definition: commctrl.h:3394

Referenced by SoundsDlgProc().

◆ SoundsDlgProc()

INT_PTR CALLBACK SoundsDlgProc ( HWND  hwndDlg,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Should store in current member

Definition at line 1243 of file sounds.c.

1247{
1248 PGLOBAL_DATA pGlobalData;
1249
1252 WCHAR szFilter[256], szTitle[256];
1253 LPWSTR pFileName;
1254 LRESULT lResult;
1255
1256 pGlobalData = (PGLOBAL_DATA)GetWindowLongPtrW(hwndDlg, DWLP_USER);
1257
1258 switch (uMsg)
1259 {
1260 case WM_INITDIALOG:
1261 {
1263 SetWindowLongPtrW(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
1264
1265 pGlobalData->NumWavOut = waveOutGetNumDevs();
1266
1267 pGlobalData->hPlayIcon = LoadImageW(hApplet,
1269 IMAGE_ICON,
1270 32,
1271 32,
1273 pGlobalData->hStopIcon = LoadImageW(hApplet,
1275 IMAGE_ICON,
1276 32,
1277 32,
1280 IMAGE_ICON, (LPARAM)pGlobalData->hPlayIcon);
1281
1286 IMAGE_ICON);
1287
1288 LoadEventLabels(pGlobalData);
1289 LoadSoundProfiles(pGlobalData, hwndDlg);
1290 LoadSoundFiles(hwndDlg);
1291 ShowSoundScheme(pGlobalData, hwndDlg);
1292
1293 if (wParam == (WPARAM)GetDlgItem(hwndDlg, IDC_SOUND_SCHEME))
1294 return TRUE;
1296 return FALSE;
1297 }
1298 case WM_COMMAND:
1299 {
1300 switch (LOWORD(wParam))
1301 {
1302 case IDC_BROWSE_SOUND:
1303 {
1304 ZeroMemory(&ofn, sizeof(ofn));
1305 ofn.lStructSize = sizeof(ofn);
1306 ofn.hwndOwner = hwndDlg;
1312 ofn.nFilterIndex = 0;
1315 ofn.lpstrInitialDir = L"%SystemRoot%\\Media";
1317
1318 if (GetOpenFileNameW(&ofn))
1319 {
1320 // search if list already contains that sound
1321 lResult = FindSoundFileInList(hwndDlg, filename);
1322 if (lResult != CB_ERR)
1323 {
1324 SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_SETCURSEL, (WPARAM)lResult, 0);
1325 break;
1326 }
1327
1328 // extract file name
1329 pFileName = wcsrchr(filename, L'\\');
1330 ASSERT(pFileName != NULL);
1331 pFileName++;
1332
1333 // add to list
1334 lResult = SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_ADDSTRING, 0, (LPARAM)pFileName);
1335 if (lResult != CB_ERR)
1336 {
1337 // add path and select item
1339 SendDlgItemMessageW(hwndDlg, IDC_SOUND_LIST, CB_SETCURSEL, (WPARAM)lResult, 0);
1340 }
1341 }
1342 break;
1343 }
1344 case IDC_PLAY_SOUND:
1345 {
1346 LRESULT lIndex;
1347
1348 if (StopSoundTest(hwndDlg))
1349 {
1351 IMAGE_ICON, (LPARAM)pGlobalData->hPlayIcon);
1352 break;
1353 }
1354
1355 lIndex = ComboBox_GetCurSel(GetDlgItem(hwndDlg, IDC_SOUND_LIST));
1356 if (lIndex == CB_ERR)
1357 {
1358 break;
1359 }
1360
1361 lIndex = ComboBox_GetItemData(GetDlgItem(hwndDlg, IDC_SOUND_LIST), lIndex);
1362 if (lIndex != CB_ERR)
1363 {
1364 if (StartSoundTest(hwndDlg, (LPWSTR)lIndex))
1365 {
1367 IMAGE_ICON, (LPARAM)pGlobalData->hStopIcon);
1368 }
1369 }
1370 break;
1371 }
1372 case IDC_SOUND_SCHEME:
1373 {
1374 if (HIWORD(wParam) == CBN_SELENDOK)
1375 {
1377 ShowSoundScheme(pGlobalData, hwndDlg);
1382 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
1383 }
1384 break;
1385 }
1386 case IDC_SOUND_LIST:
1387 {
1388 if (HIWORD(wParam) == CBN_SELENDOK)
1389 {
1390 PLABEL_CONTEXT pLabelContext;
1392 TVITEMW item;
1393 LRESULT lIndex;
1394
1396 if (hItem == NULL)
1397 {
1398 break;
1399 }
1400
1401 lIndex = ComboBox_GetCurSel(GetDlgItem(hwndDlg, IDC_SOUND_LIST));
1402 if (lIndex == CB_ERR)
1403 {
1404 break;
1405 }
1406
1407 ZeroMemory(&item, sizeof(item));
1408 item.mask = TVIF_PARAM;
1409 item.hItem = hItem;
1411 {
1412 LRESULT lResult;
1413 pLabelContext = (PLABEL_CONTEXT)item.lParam;
1414
1415 lResult = ComboBox_GetItemData(GetDlgItem(hwndDlg, IDC_SOUND_LIST), lIndex);
1416 if (lResult == CB_ERR || lResult == 0)
1417 {
1418 if (lIndex != pLabelContext->szValue[0])
1419 {
1420 /* Update the tree view item image */
1422 item.iImage = IMAGE_SOUND_NONE;
1423 item.iSelectedImage = IMAGE_SOUND_NONE;
1425
1426 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
1427
1429 }
1430
1431 pLabelContext->szValue[0] = UNICODE_NULL;
1432
1433 break;
1434 }
1435
1436 if (_wcsicmp(pLabelContext->szValue, (PWSTR)lResult) || (lIndex != pLabelContext->szValue[0]))
1437 {
1438 /* Update the tree view item image */
1440 item.iImage = IMAGE_SOUND_ASSIGNED;
1441 item.iSelectedImage = IMAGE_SOUND_ASSIGNED;
1443
1444 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
1445
1449 StringCchCopyW(pLabelContext->szValue, _countof(pLabelContext->szValue), (PWSTR)lResult);
1450 }
1451
1452 if (wcslen((PWSTR)lResult) && lIndex != 0 && pGlobalData->NumWavOut != 0)
1453 {
1455 }
1456 else
1457 {
1459 }
1460 }
1461 }
1462 break;
1463 }
1464 }
1465 break;
1466 }
1467 case WM_DESTROY:
1468 {
1469 StopSoundTest(hwndDlg);
1470 FreeSoundFiles(hwndDlg);
1471 FreeSoundProfiles(hwndDlg);
1472 FreeAppMap(pGlobalData);
1473 FreeLabelMap(pGlobalData);
1474 if (pGlobalData->hSoundsImageList)
1475 ImageList_Destroy(pGlobalData->hSoundsImageList);
1476
1477 if (pGlobalData->hStopIcon)
1478 DestroyIcon(pGlobalData->hStopIcon);
1479
1480 if (pGlobalData->hPlayIcon)
1481 DestroyIcon(pGlobalData->hPlayIcon);
1482
1483 HeapFree(GetProcessHeap(), 0, pGlobalData);
1484 break;
1485 }
1486 case WM_NOTIFY:
1487 {
1488 PLABEL_CONTEXT pLabelContext;
1489 PWSTR ptr;
1490
1491 LPNMHDR lpnm = (LPNMHDR)lParam;
1492
1493 switch (lpnm->code)
1494 {
1495 case PSN_APPLY:
1496 {
1497 ApplyChanges(hwndDlg);
1498 break;
1499 }
1500 case PSN_KILLACTIVE:
1501 {
1502 if (StopSoundTest(hwndDlg))
1503 {
1505 IMAGE_ICON, (LPARAM)pGlobalData->hPlayIcon);
1506 }
1507
1508 break;
1509 }
1510 case TVN_SELCHANGED:
1511 {
1513 LRESULT lCount, lIndex, lResult;
1514
1515 if (StopSoundTest(hwndDlg))
1516 {
1518 IMAGE_ICON, (LPARAM)pGlobalData->hPlayIcon);
1519 }
1520
1521 pLabelContext = (PLABEL_CONTEXT)nm->itemNew.lParam;
1522 if (pLabelContext == NULL)
1523 {
1528 return FALSE;
1529 }
1530
1534
1535 if (wcslen(pLabelContext->szValue) == 0)
1536 {
1537 lIndex = ComboBox_SetCurSel(GetDlgItem(hwndDlg, IDC_SOUND_LIST), 0);
1539 break;
1540 }
1541
1542 if (pGlobalData->NumWavOut != 0)
1544
1545 lCount = ComboBox_GetCount(GetDlgItem(hwndDlg, IDC_SOUND_LIST));
1546 for (lIndex = 0; lIndex < lCount; lIndex++)
1547 {
1548 lResult = ComboBox_GetItemData(GetDlgItem(hwndDlg, IDC_SOUND_LIST), lIndex);
1549 if (lResult == CB_ERR || lResult == 0)
1550 continue;
1551
1552 if (!wcscmp((PWSTR)lResult, pLabelContext->szValue))
1553 {
1554 ComboBox_SetCurSel(GetDlgItem(hwndDlg, IDC_SOUND_LIST), lIndex);
1555 return FALSE;
1556 }
1557 }
1558
1559 ptr = wcsrchr(pLabelContext->szValue, L'\\');
1560 if (ptr)
1561 {
1562 ptr++;
1563 }
1564 else
1565 {
1566 ptr = pLabelContext->szValue;
1567 }
1568
1569 lIndex = ComboBox_AddString(GetDlgItem(hwndDlg, IDC_SOUND_LIST), ptr);
1570 if (lIndex != CB_ERR)
1571 {
1572 ComboBox_SetItemData(GetDlgItem(hwndDlg, IDC_SOUND_LIST), lIndex, _wcsdup(pLabelContext->szValue));
1573 ComboBox_SetCurSel(GetDlgItem(hwndDlg, IDC_SOUND_LIST), lIndex);
1574 }
1575 break;
1576 }
1577 }
1578 break;
1579 }
1580 case WM_TIMER:
1581 {
1583 {
1586 IMAGE_ICON, (LPARAM)pGlobalData->hPlayIcon);
1587 }
1588
1589 break;
1590 }
1591 }
1592
1593 return FALSE;
1594}
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define OFN_EXPLORER
Definition: commdlg.h:104
#define OFN_HIDEREADONLY
Definition: commdlg.h:107
#define OFN_FILEMUSTEXIST
Definition: commdlg.h:106
#define IDI_SOUND_ASSIGNED
Definition: resource.h:11
#define IDI_PLAY_ICON
Definition: resource.h:5
#define IDI_SOUND_SECTION
Definition: resource.h:10
#define IDI_STOP_ICON
Definition: resource.h:6
#define IDC_TEXT_SOUND
Definition: resource.h:47
#define IDC_PLAY_SOUND
Definition: resource.h:48
#define IDS_WAVE_FILES_FILTER
Definition: resource.h:85
#define IDS_BROWSE_FOR_SOUND
Definition: resource.h:84
#define IDC_BROWSE_SOUND
Definition: resource.h:49
BOOL WINAPI GetOpenFileNameW(OPENFILENAMEW *ofn)
Definition: filedlg.c:4736
const char * filename
Definition: ioapi.h:137
if(dx< 0)
Definition: linetemp.h:194
TCHAR szTitle[MAX_LOADSTRING]
Definition: magnifier.c:35
static ATOM item
Definition: dde.c:856
LPTSTR szFilter
Definition: mplay32.c:30
#define LOWORD(l)
Definition: pedump.c:82
#define PropSheet_Changed(d, w)
Definition: prsht.h:344
#define PSN_KILLACTIVE
Definition: prsht.h:116
#define PSN_APPLY
Definition: prsht.h:117
#define TVN_SELCHANGED
Definition: commctrl.h:3735
#define TreeView_DeleteAllItems(hwnd)
Definition: commctrl.h:3417
struct tagNMTREEVIEWW * LPNMTREEVIEWW
#define TreeView_GetSelection(hwnd)
Definition: commctrl.h:3473
#define TreeView_GetItem(hwnd, pitem)
Definition: commctrl.h:3490
#define TreeView_SetItem(hwnd, pitem)
Definition: commctrl.h:3497
#define WM_NOTIFY
Definition: richedit.h:61
OPENFILENAME ofn
Definition: sndrec32.cpp:56
struct _GLOBAL_DATA GLOBAL_DATA
BOOL LoadSoundFiles(HWND hwndDlg)
Definition: sounds.c:816
static BOOL StartSoundTest(HWND hwndDlg, LPCWSTR pszSound)
Definition: sounds.c:1208
HIMAGELIST InitImageList(UINT StartResource, UINT EndResource, UINT Width, UINT Height, ULONG type)
Definition: sounds.c:1087
LPWSTR MakeFilter(LPWSTR psz)
Definition: sounds.c:68
static LRESULT FindSoundFileInList(HWND hwndDlg, LPCWSTR pSoundPath)
Definition: sounds.c:905
BOOL LoadEventLabels(PGLOBAL_DATA pGlobalData)
Definition: sounds.c:305
static VOID FreeAppMap(PGLOBAL_DATA pGlobalData)
Definition: sounds.c:192
static VOID FreeSoundProfiles(HWND hwndDlg)
Definition: sounds.c:502
struct _LABEL_CONTEXT * PLABEL_CONTEXT
BOOL ApplyChanges(HWND hwndDlg)
Definition: sounds.c:1018
#define ID_SOUND_TEST_TIMER
Definition: sounds.c:19
struct _GLOBAL_DATA * PGLOBAL_DATA
static VOID FreeLabelMap(PGLOBAL_DATA pGlobalData)
Definition: sounds.c:153
BOOL LoadSoundProfiles(PGLOBAL_DATA pGlobalData, HWND hwndDlg)
Definition: sounds.c:788
BOOL ShowSoundScheme(PGLOBAL_DATA pGlobalData, HWND hwndDlg)
Definition: sounds.c:931
static VOID FreeSoundFiles(HWND hwndDlg)
Definition: sounds.c:879
static BOOL StopSoundTest(HWND hwndDlg)
Definition: sounds.c:1227
HICON hStopIcon
Definition: sounds.c:63
HICON hPlayIcon
Definition: sounds.c:62
UINT NumWavOut
Definition: sounds.c:61
UINT code
Definition: winuser.h:3159
TVITEMW itemNew
Definition: commctrl.h:3638
DWORD nFilterIndex
Definition: commdlg.h:335
HWND hwndOwner
Definition: commdlg.h:330
LPCSTR lpstrTitle
Definition: commdlg.h:341
LPSTR lpstrFile
Definition: commdlg.h:336
DWORD Flags
Definition: commdlg.h:342
LPCSTR lpstrInitialDir
Definition: commdlg.h:340
DWORD lStructSize
Definition: commdlg.h:329
LPCSTR lpstrFilter
Definition: commdlg.h:332
DWORD nMaxFile
Definition: commdlg.h:337
LPARAM lParam
Definition: commctrl.h:3325
HTREEITEM hItem
Definition: treelist.h:37
#define HIWORD(l)
Definition: typedefs.h:247
#define ComboBox_GetCurSel(hwndCtl)
Definition: windowsx.h:49
UINT WINAPI waveOutGetNumDevs(void)
Definition: winmm.c:2137
#define DWLP_USER
Definition: winuser.h:872
#define GetWindowLongPtrW
Definition: winuser.h:4829
#define WM_COMMAND
Definition: winuser.h:1740
#define CB_SETCURSEL
Definition: winuser.h:1961
#define WM_INITDIALOG
Definition: winuser.h:1739
#define BM_SETIMAGE
Definition: winuser.h:1922
#define SM_CXSMICON
Definition: winuser.h:1012
HWND WINAPI SetFocus(_In_opt_ HWND)
#define WM_TIMER
Definition: winuser.h:1742
struct tagNMHDR * LPNMHDR
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
HWND WINAPI GetParent(_In_ HWND)
#define LR_DEFAULTCOLOR
Definition: winuser.h:1087
#define CBN_SELENDOK
Definition: winuser.h:1981
#define WM_DESTROY
Definition: winuser.h:1609
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
int WINAPI GetSystemMetrics(_In_ int)
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2053

Referenced by MmSysApplet(), and ShowFullControlPanel().

◆ StartSoundTest()

static BOOL StartSoundTest ( HWND  hwndDlg,
LPCWSTR  pszSound 
)
static

Definition at line 1208 of file sounds.c.

1209{
1210 DWORD dwDuration;
1211
1212 dwDuration = GetSoundDuration(pszSound);
1213 if (dwDuration == 0)
1214 return FALSE;
1215
1217 {
1218 SetTimer(hwndDlg, ID_SOUND_TEST_TIMER, dwDuration, NULL);
1219 return TRUE;
1220 }
1221
1222 return FALSE;
1223}
#define SND_FILENAME
Definition: mmsystem.h:162
#define SND_ASYNC
Definition: mmsystem.h:154
#define SND_NODEFAULT
Definition: mmsystem.h:155
BOOL WINAPI PlaySoundW(LPCWSTR pszSoundW, HMODULE hmod, DWORD fdwSound)
Definition: playsound.c:651
static DWORD GetSoundDuration(LPCWSTR pFileName)
Get the duration of a waveform audio file.
Definition: sounds.c:1160
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)

Referenced by SoundsDlgProc().

◆ StopSoundTest()

static BOOL StopSoundTest ( HWND  hwndDlg)
static

Definition at line 1227 of file sounds.c.

1228{
1229 /* Check if the sound is playing */
1230 if (KillTimer(hwndDlg, ID_SOUND_TEST_TIMER))
1231 {
1232 /* Stop the sound */
1234 return TRUE;
1235 }
1236
1237 return FALSE;
1238}

Referenced by SoundsDlgProc().