Index: base/applications/mplay32/lang/bg-BG.rc =================================================================== --- base/applications/mplay32/lang/bg-BG.rc (revision 64175) +++ base/applications/mplay32/lang/bg-BG.rc (working copy) @@ -47,7 +47,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Всички поддържани (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Всички поддържани" IDS_TOOLTIP_PLAY "Пускане" IDS_TOOLTIP_STOP "Спиране" IDS_TOOLTIP_EJECT "Изваждане" Index: base/applications/mplay32/lang/cs-CZ.rc =================================================================== --- base/applications/mplay32/lang/cs-CZ.rc (revision 64175) +++ base/applications/mplay32/lang/cs-CZ.rc (working copy) @@ -48,7 +48,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Všechny podporované (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Všechny podporované" IDS_TOOLTIP_PLAY "Přehrát" IDS_TOOLTIP_STOP "Zastavit" IDS_TOOLTIP_EJECT "Vysunout" Index: base/applications/mplay32/lang/de-DE.rc =================================================================== --- base/applications/mplay32/lang/de-DE.rc (revision 64175) +++ base/applications/mplay32/lang/de-DE.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Alle unterstützten (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Alle unterstützten" IDS_TOOLTIP_PLAY "Wiedergabe" IDS_TOOLTIP_STOP "Stopp" IDS_TOOLTIP_EJECT "Auswerfen" Index: base/applications/mplay32/lang/en-US.rc =================================================================== --- base/applications/mplay32/lang/en-US.rc (revision 64175) +++ base/applications/mplay32/lang/en-US.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "All Supported (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "All Supported" IDS_TOOLTIP_PLAY "Play" IDS_TOOLTIP_STOP "Stop" IDS_TOOLTIP_EJECT "Eject" Index: base/applications/mplay32/lang/es-ES.rc =================================================================== --- base/applications/mplay32/lang/es-ES.rc (revision 64175) +++ base/applications/mplay32/lang/es-ES.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Todos los ficheros soportados (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Todos los ficheros soportados" IDS_TOOLTIP_PLAY "Reproducir" IDS_TOOLTIP_STOP "Detener" IDS_TOOLTIP_EJECT "Expulsar" Index: base/applications/mplay32/lang/fr-FR.rc =================================================================== --- base/applications/mplay32/lang/fr-FR.rc (revision 64175) +++ base/applications/mplay32/lang/fr-FR.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Tous les types supportés (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Tous les types supportés" IDS_TOOLTIP_PLAY "Lecture" IDS_TOOLTIP_STOP "Stop" IDS_TOOLTIP_EJECT "Éjecter" Index: base/applications/mplay32/lang/he-IL.rc =================================================================== --- base/applications/mplay32/lang/he-IL.rc (revision 64175) +++ base/applications/mplay32/lang/he-IL.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "כל הקבצים הנתמכים (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "כל הקבצים הנתמכים" IDS_TOOLTIP_PLAY "נגן" IDS_TOOLTIP_STOP "עצור" IDS_TOOLTIP_EJECT "הוצא" Index: base/applications/mplay32/lang/it-IT.rc =================================================================== --- base/applications/mplay32/lang/it-IT.rc (revision 64175) +++ base/applications/mplay32/lang/it-IT.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Tutti i tipi supportati (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Tutti i tipi supportati" IDS_TOOLTIP_PLAY "Riproduci" IDS_TOOLTIP_STOP "Interrompi" IDS_TOOLTIP_EJECT "Espelli" Index: base/applications/mplay32/lang/ja-JP.rc =================================================================== --- base/applications/mplay32/lang/ja-JP.rc (revision 64175) +++ base/applications/mplay32/lang/ja-JP.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "すべてのサポートされたファイル (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "すべてのサポートされたファイル" IDS_TOOLTIP_PLAY "再生" IDS_TOOLTIP_STOP "停止" IDS_TOOLTIP_EJECT "取り出し" Index: base/applications/mplay32/lang/nl-NL.rc =================================================================== --- base/applications/mplay32/lang/nl-NL.rc (revision 64175) +++ base/applications/mplay32/lang/nl-NL.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Mediabestanden (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Mediabestanden" IDS_TOOLTIP_PLAY "Afspelen" IDS_TOOLTIP_STOP "Stoppen" IDS_TOOLTIP_EJECT "Uitwerpen" Index: base/applications/mplay32/lang/no-NO.rc =================================================================== --- base/applications/mplay32/lang/no-NO.rc (revision 64175) +++ base/applications/mplay32/lang/no-NO.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Alle kompaktible filer (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Alle kompaktible filer" IDS_TOOLTIP_PLAY "Spill av" IDS_TOOLTIP_STOP "Stopp" IDS_TOOLTIP_EJECT "Løs ut" Index: base/applications/mplay32/lang/pl-PL.rc =================================================================== --- base/applications/mplay32/lang/pl-PL.rc (revision 64175) +++ base/applications/mplay32/lang/pl-PL.rc (working copy) @@ -51,7 +51,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Wszystkie formaty (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Wszystkie formaty" IDS_TOOLTIP_PLAY "Odtwarzaj" IDS_TOOLTIP_STOP "Zatrzymaj" IDS_TOOLTIP_EJECT "Wysuń" Index: base/applications/mplay32/lang/pt-BR.rc =================================================================== --- base/applications/mplay32/lang/pt-BR.rc (revision 64175) +++ base/applications/mplay32/lang/pt-BR.rc (working copy) @@ -45,7 +45,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Todos os formatos (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Todos os formatos" IDS_TOOLTIP_PLAY "Executar" IDS_TOOLTIP_STOP "Pausar" IDS_TOOLTIP_EJECT "Ejetar" Index: base/applications/mplay32/lang/ro-RO.rc =================================================================== --- base/applications/mplay32/lang/ro-RO.rc (revision 64175) +++ base/applications/mplay32/lang/ro-RO.rc (working copy) @@ -49,7 +49,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Toate admisibile (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Toate admisibile" IDS_TOOLTIP_PLAY "Redare conținut multimedia" IDS_TOOLTIP_STOP "Oprirea lecturii" IDS_TOOLTIP_EJECT "Scoate" Index: base/applications/mplay32/lang/ru-RU.rc =================================================================== --- base/applications/mplay32/lang/ru-RU.rc (revision 64175) +++ base/applications/mplay32/lang/ru-RU.rc (working copy) @@ -43,7 +43,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Все поддерживаемые (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Все поддерживаемые" IDS_TOOLTIP_PLAY "Воспроизведение" IDS_TOOLTIP_STOP "Остановить" IDS_TOOLTIP_EJECT "Извлечь" Index: base/applications/mplay32/lang/sk-SK.rc =================================================================== --- base/applications/mplay32/lang/sk-SK.rc (revision 64175) +++ base/applications/mplay32/lang/sk-SK.rc (working copy) @@ -48,7 +48,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Všetky podporované (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Všetky podporované" IDS_TOOLTIP_PLAY "Prehrať" IDS_TOOLTIP_STOP "Zastaviť" IDS_TOOLTIP_EJECT "Vysunúť" Index: base/applications/mplay32/lang/sq-AL.rc =================================================================== --- base/applications/mplay32/lang/sq-AL.rc (revision 64175) +++ base/applications/mplay32/lang/sq-AL.rc (working copy) @@ -47,7 +47,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Të gjith suportimet (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Të gjith suportimet" IDS_TOOLTIP_PLAY "Fillo" IDS_TOOLTIP_STOP "Ndalo" IDS_TOOLTIP_EJECT "Nxjerr" Index: base/applications/mplay32/lang/sv-SE.rc =================================================================== --- base/applications/mplay32/lang/sv-SE.rc (revision 64175) +++ base/applications/mplay32/lang/sv-SE.rc (working copy) @@ -50,7 +50,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Alla kompaktibla filer (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Alla kompaktibla filer" IDS_TOOLTIP_PLAY "Spela upp" IDS_TOOLTIP_STOP "Stopp" IDS_TOOLTIP_EJECT "Mata ut" Index: base/applications/mplay32/lang/tr-TR.rc =================================================================== --- base/applications/mplay32/lang/tr-TR.rc (revision 64175) +++ base/applications/mplay32/lang/tr-TR.rc (working copy) @@ -45,7 +45,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Desteklenen Kütükler (*.wav, *.cda, *.mid, *.midi, *.avi)\0*.wav;*.cda;*.mid;*.midi;*.avi\0" + IDS_ALL_TYPES_FILTER "Desteklenen Kütükler" IDS_TOOLTIP_PLAY "Çal" IDS_TOOLTIP_STOP "Durdur" IDS_TOOLTIP_EJECT "Çıkart" Index: base/applications/mplay32/lang/uk-UA.rc =================================================================== --- base/applications/mplay32/lang/uk-UA.rc (revision 64175) +++ base/applications/mplay32/lang/uk-UA.rc (working copy) @@ -51,7 +51,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "Всі підтримувані (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "Всі підтримувані" IDS_TOOLTIP_PLAY "Відтворення" IDS_TOOLTIP_STOP "Зупинити" IDS_TOOLTIP_EJECT "Витягти" Index: base/applications/mplay32/lang/zh-CN.rc =================================================================== --- base/applications/mplay32/lang/zh-CN.rc (revision 64175) +++ base/applications/mplay32/lang/zh-CN.rc (working copy) @@ -45,7 +45,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "所有支持的格式 (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "所有支持的格式" IDS_TOOLTIP_PLAY "播放" IDS_TOOLTIP_STOP "停止" IDS_TOOLTIP_EJECT "弹出" Index: base/applications/mplay32/lang/zh-TW.rc =================================================================== --- base/applications/mplay32/lang/zh-TW.rc (revision 64175) +++ base/applications/mplay32/lang/zh-TW.rc (working copy) @@ -51,7 +51,7 @@ STRINGTABLE BEGIN - IDS_ALL_TYPES_FILTER "所有支援格式 (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0" + IDS_ALL_TYPES_FILTER "所有支援格式" IDS_TOOLTIP_PLAY "播放" IDS_TOOLTIP_STOP "停止" IDS_TOOLTIP_EJECT "卸載" Index: base/applications/mplay32/mplay32.c =================================================================== --- base/applications/mplay32/mplay32.c (revision 64175) +++ base/applications/mplay32/mplay32.c (working copy) @@ -8,6 +8,7 @@ #define MAIN_WINDOW_HEIGHT 125 #define MAIN_WINDOW_MIN_WIDTH 250 +#define MAX_MCISTR 256 HINSTANCE hInstance = NULL; HWND hTrackBar = NULL; @@ -152,8 +153,8 @@ static VOID ShowMCIError(HWND hwnd, DWORD dwError) { - TCHAR szErrorMessage[256]; - TCHAR szTempMessage[300]; + TCHAR szErrorMessage[MAX_MCISTR]; + TCHAR szTempMessage[MAX_MCISTR + 44]; if (mciGetErrorString(dwError, szErrorMessage, sizeof(szErrorMessage) / sizeof(TCHAR)) == FALSE) { @@ -321,6 +322,72 @@ } static DWORD +GetNumDevices(VOID) +{ + MCI_SYSINFO_PARMS mciSysInfo; + DWORD dwNumDevices = 0; + + + mciSysInfo.dwCallback = 0; + mciSysInfo.lpstrReturn = (LPTSTR)&dwNumDevices; + mciSysInfo.dwRetSize = sizeof(DWORD); + mciSysInfo.dwNumber = 0; + mciSysInfo.wDeviceType = MCI_ALL_DEVICE_ID; + + mciSendCommand(MCI_ALL_DEVICE_ID, MCI_SYSINFO, MCI_SYSINFO_QUANTITY, (DWORD_PTR)&mciSysInfo); + + return *(DWORD*)mciSysInfo.lpstrReturn; +} + +static DWORD +GetDeviceName(DWORD dwDeviceIndex, LPTSTR lpDeviceName, DWORD dwDeviceName) +{ + MCI_SYSINFO_PARMS mciSysInfo; + + + mciSysInfo.dwCallback = 0; + mciSysInfo.lpstrReturn = lpDeviceName; + mciSysInfo.dwRetSize = dwDeviceName; + mciSysInfo.dwNumber = dwDeviceIndex; + mciSysInfo.wDeviceType = MCI_DEVTYPE_WAVEFORM_AUDIO; + + return mciSendCommand(MCI_ALL_DEVICE_ID, MCI_SYSINFO, MCI_SYSINFO_NAME, (DWORD_PTR)&mciSysInfo); +} + +static DWORD +GetDeviceFriendlyName(LPTSTR lpDeviceName, LPTSTR lpFriendlyName, DWORD dwFriendlyName) +{ + MCI_INFO_PARMS mciInfo; + MCI_OPEN_PARMS mciOpen; + MCI_GENERIC_PARMS mciGeneric; + DWORD dwError; + + + mciOpen.lpstrDeviceType = lpDeviceName; + mciOpen.lpstrElementName = NULL; + mciOpen.dwCallback = 0; + mciOpen.wDeviceID = 0; + mciOpen.lpstrAlias = NULL; + + dwError = mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE | MCI_WAIT, (DWORD_PTR)&mciOpen); + if (dwError) + { + return dwError; + } + + mciInfo.dwCallback = 0; + mciInfo.lpstrReturn = lpFriendlyName; + mciInfo.dwRetSize = dwFriendlyName; + + dwError = mciSendCommand(mciOpen.wDeviceID, MCI_INFO, MCI_INFO_PRODUCT, (DWORD_PTR)&mciInfo); + + mciGeneric.dwCallback = 0; + mciSendCommand(mciOpen.wDeviceID, MCI_CLOSE, MCI_WAIT, (DWORD_PTR)&mciGeneric); + + return dwError; +} + +static DWORD CloseMciDevice(VOID) { MCI_GENERIC_PARMS mciGeneric; @@ -644,12 +711,166 @@ { OPENFILENAME OpenFileName; TCHAR szFile[MAX_PATH + 1] = _T("\0"); - TCHAR szFilter[MAX_PATH], szCurrentDir[MAX_PATH]; + TCHAR szFilterDesc[MAX_PATH]; + TCHAR szCurrentDir[MAX_PATH]; + TCHAR szDeviceName[MAX_MCISTR]; + TCHAR szFriendlyName[MAX_MCISTR]; + TCHAR *szDevice = NULL; + TCHAR *szExtensionList = NULL; + TCHAR *szFilter = NULL; + TCHAR *szExtension = NULL; + TCHAR *c = NULL; + TCHAR *d = NULL; + DWORD dwNumValues; + DWORD dwNumDevices; + DWORD dwValueSize; + DWORD dwValueDataSize; + DWORD dwMaskSize; + DWORD dwFilterSize; + DWORD dwDeviceSize; + DWORD dwExtensionSize; + DWORD i; + DWORD j; + UINT uSizeRemain; + UINT uMaskRemain; + HKEY hKey; + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\MCI Extensions"), 0, KEY_READ, &hKey) != ERROR_SUCCESS) + { + return; + } + + if (RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwNumValues, &dwValueSize, &dwValueDataSize, NULL, NULL) != ERROR_SUCCESS) + { + goto Exit; + } + + dwMaskSize = ((dwValueSize + 3) * dwNumValues) + 1; + + szExtensionList = malloc(dwMaskSize * sizeof(TCHAR)); + if (!szExtensionList) + { + goto Exit; + } + + dwNumDevices = GetNumDevices(); + + // Allocate space for every pair of Device and Extension Filter + dwFilterSize = (MAX_MCISTR + (dwMaskSize * 2) + 5) * dwNumDevices; + + // Add space for the "All supported" entry + dwFilterSize = ((dwFilterSize + (dwMaskSize * 2) + 7) * sizeof(TCHAR)) + sizeof(szFilterDesc); + + szFilter = malloc(dwFilterSize); + if (!szFilter) + { + goto Exit; + } + + szExtension = malloc((dwValueSize + 1) * sizeof(TCHAR)); + if (!szExtension) + { + goto Exit; + } + + szDevice = malloc(dwValueDataSize + 1); + if (!szDevice) + { + goto Exit; + } + ZeroMemory(&OpenFileName, sizeof(OpenFileName)); + ZeroMemory(szFilter, dwFilterSize); + ZeroMemory(szFilterDesc, sizeof(szFilterDesc)); - LoadString(hInstance, IDS_ALL_TYPES_FILTER, szFilter, sizeof(szFilter) / sizeof(TCHAR)); + uSizeRemain = dwFilterSize; + c = szFilter; + for (j = 1; j <= dwNumDevices; j++) + { + if (GetDeviceName(j, szDeviceName, sizeof(szDeviceName))) + { + continue; + } + + if (GetDeviceFriendlyName(szDeviceName, szFriendlyName, sizeof(szFriendlyName) / sizeof(TCHAR))) + { + continue; + } + + uMaskRemain = dwMaskSize * sizeof(TCHAR); + d = szExtensionList; + + StringCbCopy(szExtensionList, dwMaskSize * sizeof(TCHAR), _T("*.*")); + + for (i = 0; i < dwNumValues; i++) + { + dwExtensionSize = dwValueSize + 1; + dwDeviceSize = dwValueDataSize + 1; + + ZeroMemory(szDevice, dwDeviceSize); + + if (RegEnumValue(hKey, i, szExtension, &dwExtensionSize, NULL, NULL, (LPBYTE)szDevice, &dwDeviceSize) == ERROR_SUCCESS) + { + CharLowerBuff(szDevice, dwDeviceSize / sizeof(TCHAR)); + CharLowerBuff(szDeviceName, sizeof(szDeviceName) / sizeof(TCHAR)); + if (_tcscmp(szDeviceName, szDevice) == 0) + { + CharLowerBuff(szExtension, dwExtensionSize / sizeof(TCHAR)); + StringCbPrintfEx(d, uMaskRemain, &d, &uMaskRemain, 0, _T("%s%s%s"), _T("*."), szExtension, _T(";")); + } + } + } + + // Remove the last separator + d--; + uSizeRemain += sizeof(*d); + StringCbCopy(d, uSizeRemain, _T("\0")); + + StringCbPrintfEx(c, uSizeRemain, &c, &uSizeRemain, 0, _T("%s (%s)"), szFriendlyName, szExtensionList); + + // Skip one char to seperate the description from the filter mask + c++; + uSizeRemain -= sizeof(*c); + + StringCbCopyEx(c, uSizeRemain, szExtensionList, &c, &uSizeRemain, 0); + + // Skip another char to seperate the elements of the filter mask + c++; + uSizeRemain -= sizeof(*c); + } + + uMaskRemain = dwMaskSize * sizeof(TCHAR); + d = szExtensionList; + + for (i = 0; i < dwNumValues; i++) + { + dwExtensionSize = dwValueSize + 1; + + if (RegEnumValue(hKey, i, szExtension, &dwExtensionSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) + { + CharLowerBuff(szExtension, dwExtensionSize / sizeof(TCHAR)); + StringCbPrintfEx(d, uMaskRemain, &d, &uMaskRemain, 0, _T("%s%s%s"), _T("*."), szExtension, _T(";")); + } + } + + // Remove the last separator + d--; + uSizeRemain += sizeof(*d); + StringCbCopy(d, uSizeRemain, _T("\0")); + + LoadString(hInstance, IDS_ALL_TYPES_FILTER, szFilterDesc, sizeof(szFilterDesc) / sizeof(TCHAR)); + + StringCbPrintfEx(c, uSizeRemain, &c, &uSizeRemain, 0, _T("%s (%s)"), szFilterDesc, szExtensionList); + + // Skip one char to seperate the description from the filter mask + c++; + uSizeRemain -= sizeof(*c); + + StringCbCopyEx(c, uSizeRemain, szExtensionList, &c, &uSizeRemain, 0); + + if (!GetCurrentDirectory(sizeof(szCurrentDir) / sizeof(TCHAR), szCurrentDir)) { _tcscpy(szCurrentDir, _T("c:\\")); @@ -669,6 +890,13 @@ { PlayFile(hwnd, OpenFileName.lpstrFile); } + +Exit: + RegCloseKey(hKey); + free(szFilter); + free(szExtensionList); + free(szExtension); + free(szDevice); } LRESULT CALLBACK Index: base/applications/mplay32/mplay32.h =================================================================== --- base/applications/mplay32/mplay32.h (revision 64175) +++ base/applications/mplay32/mplay32.h (working copy) @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -10,6 +11,7 @@ #include #include #include +#include #include "resource.h"