Index: base/applications/mplay32/lang/bg-BG.rc =================================================================== --- base/applications/mplay32/lang/bg-BG.rc (revision 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ 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 "Çıkar" Index: base/applications/mplay32/lang/uk-UA.rc =================================================================== --- base/applications/mplay32/lang/uk-UA.rc (revision 63953) +++ 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 63953) +++ 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 63953) +++ 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 63953) +++ base/applications/mplay32/mplay32.c (working copy) @@ -638,12 +638,72 @@ { 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 szExtension[MAX_PATH]; + TCHAR *szExtensionList = NULL; + TCHAR *szFilter = NULL; + TCHAR *c = NULL; + DWORD dwNumValues; + DWORD dwValueSize; + DWORD dwElementSize = 0; + DWORD i; + UINT uSizeRemain; + HKEY hKey; ZeroMemory(&OpenFileName, sizeof(OpenFileName)); - LoadString(hInstance, IDS_ALL_TYPES_FILTER, szFilter, sizeof(szFilter) / sizeof(TCHAR)); + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\MCI Extensions"), 0, KEY_READ, &hKey) == ERROR_SUCCESS) + { + if (RegQueryInfoKey(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwNumValues, &dwValueSize, NULL, NULL, NULL) == ERROR_SUCCESS) + { + dwElementSize = (dwValueSize + 4) * dwNumValues; + szExtensionList = malloc(dwElementSize * sizeof(TCHAR)); + if (szExtensionList) + { + uSizeRemain = dwElementSize * sizeof(TCHAR); + c = szExtensionList; + + for (i = 0; i < dwNumValues; i++) + { + dwValueSize = MAX_PATH; + RegEnumValue(hKey, i, szExtension, &dwValueSize, NULL, NULL, NULL, NULL); + StringCbPrintfEx(c, uSizeRemain, &c, &uSizeRemain, 0, _T("%s%s"), _T("*."), szExtension); + + // Don't add a separator after the last extension + if (i < dwNumValues - 1) + { + StringCbCopyEx(c, uSizeRemain, _T(";"), &c, &uSizeRemain, 0); + } + } + } + } + + RegCloseKey(hKey); + } + + dwElementSize = (((dwElementSize * 2) + 3) * sizeof(TCHAR)) + sizeof(szFilterDesc); + + szFilter = malloc(dwElementSize); + if (szFilter) + { + ZeroMemory(szFilter, dwElementSize); + ZeroMemory(szFilterDesc, sizeof(szFilterDesc)); + + LoadString(hInstance, IDS_ALL_TYPES_FILTER, szFilterDesc, sizeof(szFilterDesc) / sizeof(TCHAR)); + + uSizeRemain = dwElementSize; + c = szFilter; + 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:\\")); @@ -663,6 +723,9 @@ { PlayFile(hwnd, OpenFileName.lpstrFile); } + + free(szFilter); + free(szExtensionList); } LRESULT CALLBACK Index: base/applications/mplay32/mplay32.h =================================================================== --- base/applications/mplay32/mplay32.h (revision 63953) +++ 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"