#include <windows.h>
#include <commctrl.h>
+#include <setupapi.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <tchar.h>
#include <cpl.h>
#include "intl.h"
#include "resource.h"
+typedef struct CPStruct
+{
+ WORD Status;
+ UINT CPage;
+ HANDLE hCPage;
+ TCHAR Name[MAX_PATH];
+ struct CPStruct *NextItem;
+} CPAGE, *LPCPAGE;
+
+static LPCPAGE PCPage = NULL;
+static HINF hIntlInf;
+
+static BOOL
+GetSupportedCP(VOID)
+{
+ UINT uiCPage, Count, Number;
+ INFCONTEXT infCont;
+ LPCPAGE lpCPage;
+ HANDLE hCPage;
+
+ Count = (UINT) SetupGetLineCount(hIntlInf, _T("CodePages"));
+ if (Count <= 0) return FALSE;
+
+ for (Number = 0; Number < Count; Number++)
+ {
+ if (SetupGetLineByIndex(hIntlInf, _T("CodePages"), Number, &infCont) &&
+ SetupGetIntField(&infCont, 0, (PINT)&uiCPage))
+ {
+ if (!(hCPage = GlobalAlloc(GHND, sizeof(CPAGE)))) return FALSE;
+
+ lpCPage = GlobalLock(hCPage);
+ lpCPage->CPage = uiCPage;
+ lpCPage->hCPage = hCPage;
+ lpCPage->Status = 0;
+ (lpCPage->Name)[0] = 0;
+
+ CPINFOEX cpInfEx;
+ if (GetCPInfoEx(uiCPage, 0, &cpInfEx))
+ {
+ _tcscpy(lpCPage->Name, cpInfEx.CodePageName);
+ }
+ else if (!SetupGetStringField(&infCont, 1, lpCPage->Name, MAX_PATH, NULL))
+ {
+ GlobalUnlock(hCPage);
+ GlobalFree(hCPage);
+ continue;
+ }
+
+ TCHAR Section[MAX_PATH];
+ _stprintf(Section, TEXT("%s%d"), _T("CODEPAGE_REMOVE_"), uiCPage);
+ if ((uiCPage == GetACP()) || (uiCPage == GetOEMCP()) ||
+ (!SetupFindFirstLine(hIntlInf, Section, _T("AddReg"), &infCont)))
+ {
+ lpCPage->Status |= (0x0001 | 0x0002);
+ }
+
+ lpCPage->NextItem = PCPage;
+ PCPage = lpCPage;
+ }
+ }
+
+ return TRUE;
+}
+
+static BOOL CALLBACK
+InstalledCPProc(LPTSTR lpStr)
+{
+ LPCPAGE lpCP;
+ UINT uiCP;
+
+ lpCP = PCPage;
+ uiCP = _ttol(lpStr);
+ for (;;)
+ {
+ if (!lpCP) break;
+ if (lpCP->CPage == uiCP)
+ {
+ lpCP->Status |= 0x0001;
+ break;
+ }
+ lpCP = lpCP->NextItem;
+ }
+
+ return TRUE;
+}
+
+static VOID
+InitLangList(HWND hwndDlg)
+{
+ LPCPAGE lpCPage;
+ INT ItemIndex;
+ HWND hList;
+
+ hList = GetDlgItem(hwndDlg, IDC_CONV_TABLES);
+
+ hIntlInf = SetupOpenInfFile(_T("intl.inf"), NULL, INF_STYLE_WIN4, NULL);
+
+ if (hIntlInf == INVALID_HANDLE_VALUE) return;
+
+ if (!SetupOpenAppendInfFile(NULL, hIntlInf, NULL))
+ {
+ SetupCloseInfFile(hIntlInf);
+ hIntlInf = NULL;
+ return;
+ }
+
+ if (!GetSupportedCP()) return;
+
+ SetupCloseInfFile(hIntlInf);
+
+ if (!EnumSystemCodePages(InstalledCPProc, CP_INSTALLED)) return;
+
+ LV_COLUMN column;
+ LV_ITEM item;
+ RECT ListRect;
+
+ ZeroMemory(&column, sizeof(LV_COLUMN));
+ column.mask = LVCF_FMT|LVCF_TEXT|LVCF_WIDTH;
+ column.fmt = LVCFMT_LEFT;
+ GetClientRect(hList, &ListRect);
+ column.cx = ListRect.right - GetSystemMetrics(SM_CYHSCROLL);
+ (VOID) ListView_InsertColumn(hList, 0, &column);
+
+ (VOID) ListView_SetExtendedListViewStyle(hList, LVS_EX_CHECKBOXES|LVS_EX_FULLROWSELECT);
+
+ lpCPage = PCPage;
+
+ for (;;)
+ {
+ if (!lpCPage) break;
+ ZeroMemory(&item, sizeof(LV_ITEM));
+ item.mask = LVIF_TEXT|LVIF_PARAM|LVIF_STATE;
+ item.state = 0;
+ item.stateMask = LVIS_STATEIMAGEMASK;
+ item.pszText = lpCPage->Name;
+ item.lParam = (LPARAM)lpCPage;
+
+ ItemIndex = ListView_InsertItem(hList, &item);
+
+ if (ItemIndex >= 0)
+ {
+ if (lpCPage->Status & 0x0001)
+ {
+ ListView_SetItemState(hList, ItemIndex,
+ INDEXTOSTATEIMAGEMASK(LVIS_SELECTED),
+ LVIS_STATEIMAGEMASK);
+ }
+ else
+ {
+ ListView_SetItemState(hList, ItemIndex,
+ INDEXTOSTATEIMAGEMASK(LVIS_FOCUSED),
+ LVIS_STATEIMAGEMASK);
+ }
+ }
+
+ lpCPage = lpCPage->NextItem;
+ }
+}
+
/* Property page dialog callback */
INT_PTR CALLBACK
AdvancedPageProc(HWND hwndDlg,
switch(uMsg)
{
case WM_INITDIALOG:
- break;
+ {
+ InitLangList(hwndDlg);
+ }
+ break;
}
return FALSE;
LTEXT "Òàçè íàñòðîéêà ïîçâîëÿâà íà íåóíèêîä ïðèëîæåíèÿòà äà ïîêàçâàò ïðàâèëíî èçáîðíèöèòå è ïðîçîðöèòå íà ïðèñúùèÿ èì åçèê. Òÿ íå çàñÿãà óíèêîä ïðèëîæåíèÿòà, íî çàñÿãà âñè÷êè ïîòðåáèòåëè íà êîìïþòúðà.", -1, 14, 18, 216, 33
LTEXT "Èçáåðåòå ïîäõîäÿù åçèê çà íåóíèêîä ïðèëîæåíèÿòà:", -1, 14, 55, 216, 10
GROUPBOX "Çíàêîâ íàáîð", -1, 6, 92, 233, 88
- LISTBOX IDC_CONV_TABLES, 14, 105, 218, 70, LBS_STANDARD
+ CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Ïîäðàçáðàíè ïîòðåáèòåëñêè íàñòðîéêè", -1, 6, 183, 233, 33
CHECKBOX "Ïðèëàãàíå íà âñè÷êè íàñòðîéêè çà òåêóùèÿ ïîòðåáèòåë è ïî ïîäðàçáèðàíå", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 192, 223, 22, BS_MULTILINE
END
LTEXT "Diese Einstellung ermöglicht es Unicode-Inkompatiblen Programmen, Menüs und Dialoge in der örtlichen Sprache darzustellen. Dies beeinflusst Unicode-Kompatible Programme nicht, wird aber für alle Nutzer des Computers angewendet.", -1, 14, 18, 223, 33
LTEXT "Wählen Sie eine Sprache aus, die der Sprachversion des Programmes entspricht, dass Sie nutzen wollen:", -1, 14, 55, 223, 18
GROUPBOX "Codepage Konvertierungstabellen", -1, 5, 101, 234, 88
- LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD
+ CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Standardeinstellungen für Benutzerkonten", -1, 5, 193, 234, 30
CHECKBOX "Einstellungen &auf das aktive und Standardkonto anwenden.", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END
LTEXT "This system setting enables non-Unicode programs to display menus and dialogs in their native language. It does not affect Unicode programs, but it does apply to all users of this computer.", -1, 14, 18, 223, 33
LTEXT "Select a language to match the language version of the non-Unicode programs you want to use:", -1, 14, 55, 223, 18
GROUPBOX "Code page conversion tables", -1, 5, 101, 234, 88
- LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD
+ CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Default user account settings", -1, 5, 193, 234, 30
CHECKBOX "Apply all settings to the current user account and to the default", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END
LTEXT "Esta configuración de sistema permite que algunos programas no Unicode muestren menús y diálogos en sus idiomas originales. No afecta a los programas Unicode pero afecta a todos los usuarios de este equipo.", -1, 14, 18, 223, 33
LTEXT "Seleccione un idioma que coincida con la versión de idioma de los programas no Unicode que desea utilizar:", -1, 14, 55, 223, 18
GROUPBOX "Tablas de conversión de páginas de código", -1, 5, 101, 234, 88
- LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD
+ CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Configuración de la cuenta de usuario predeterminada", -1, 5, 193, 234, 30
CHECKBOX "Aplicar toda la configuración a la cuenta de usuario actual y al perfil de usuario predeterminado", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END
LTEXT "Ce paramètre système permet aux programmes non-Unicode d'afficher les menus et les dialogues dans leur langue native. Cela n'affecte pas es programmes Unicode, mais s'applique à tous les utilisateurs de cet ordinateur.", -1, 14, 18, 223, 33
LTEXT "Sélectionnez une langue qui corresponde à la version de la langue des programmes que vous voulez utiliser :", -1, 14, 55, 223, 18
GROUPBOX "Tables de conversion des pages de code", -1, 5, 101, 234, 88
- LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD
+ CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Paramètres du compte de l'utilisateur par défaut ", -1, 5, 193, 234, 30
CHECKBOX "Appliquer tous ces paramètres au compte utilisateur actuel et à celui par défaut", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END
LTEXT "In base a questa impostazione di sistema è possibile visualizzare menù e finestre di dialogo di programmi non Unicode nella lingua di origine. I programmi Unicode resteranno invariati, ma l'impostazione verrà applicata per tutti gli utenti che utilizzano il computer.", -1, 14, 18, 223, 33
LTEXT "Selezionare una lingua per i programmi non Unicode da utilizzare:", -1, 14, 55, 223, 18
GROUPBOX "Tabella di conversione di tabelle codici", -1, 5, 101, 234, 88
- LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD
+ CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Impostazioni account utente predefinito", -1, 5, 193, 234, 30
CHECKBOX "Appli&ca tutte le impostazioni all'account utente corrente e al profilo utente predefinito", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END
LTEXT "Te ustawienia umo¿liwiaj¹ programom bez standardu Unicode wy\9cwietlaæ menu i dialogi w odpowiednich jêzykach. Nie ma to wp³ywu na programy Unicode ale dotyczy profili domy\9clnych.", -1, 14, 18, 223, 33
LTEXT "Wybierz taki jêzyk, który ma byæ u¿ywany przez programy bez Unicode:", -1, 14, 55, 223, 18
GROUPBOX "Tablice konwersji stron kodowych", -1, 5, 101, 234, 88
- LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD
+ CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Ustawienia domy\9clne u¿ytkownika", -1, 5, 193, 234, 30
CHECKBOX "Zastosuj ustawienia dla obecnego konta jak i dla profilu domy\9clnego.", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END
LTEXT "Ýòîò ïàðàìåòð ïîçâîëÿåò ïðîãðàììàì, íå ïîääåðæèâàþùèì Þíèêîä, îòîáðàæàòü ìåíþ è äèàëîãè íà ñâîåì ÿçûêå. Îí íå âëèÿåò íà Þíèêîä-ñîâìåñòèìûå ïðîãðàììû, íî ïðèìåíÿåòñÿ äëÿ âñåõ ïîëüçîâàòåëåé ýòîãî êîìïüþòåðà.", -1, 14, 18, 223, 33
LTEXT "Âûáåðèòå ÿçûê, ñîîòâåòñòâóþùèé ÿçûêó èñïîëüçóåìûõ ïðîãðàìì, êîòîðûå íå ïîääåðæèâàþò Þíèêîä:", -1, 14, 55, 223, 18
GROUPBOX "Êîäîâûå ñòðàíèöû òàáëèö ïðåîáðàçîâàíèÿ", -1, 5, 101, 234, 88
- LISTBOX IDC_CONV_TABLES, 14, 114, 217, 70, LBS_STANDARD
+ CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Ïàðàìåòðû äëÿ ñòàíäàðòíîé ó÷åòíîé çàïèñè", -1, 5, 193, 234, 30
CHECKBOX "Ïðèìåíèòü ýòè ïàðàìåòðû äëÿ òåêóùåé ó÷åòíîé çàïèñè è äëÿ ñòàíäàðòíîãî ïðîôèëÿ", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END
LTEXT "Öåé ñèñòåìíèé ïàðàìåòð äຠçìîãó ïðîãðàìàì, ÿê³ íå ï³äòðèìóþòü Þí³êîä, ïîêàçóâàòè ìåíþ òà ä³àëîãè ð³äíîþ ìîâîþ. ³í íå âïëèâຠíà ïðîãðàìè ç ï³äòðèìêîþ Þí³êîäó, àëå çàñòîñîâóºòüñÿ äî âñ³õ êîðèñòóâà÷³â öüîãî êîìï'þòåðà.", -1, 14, 18, 223, 33
LTEXT "Âèáåð³òü ìîâó, ÿêà â³äïîâ³äຠìîâí³é âåðñ³¿ áàæàíèõ ïðîãðàì áåç ï³äòðèìêè Þí³êîäó.", -1, 14, 55, 223, 18
GROUPBOX "Òàáëèö³ ïåðåòâîðåííÿ êîäîâèõ ñòîð³íîê", -1, 5, 101, 234, 88
- LISTBOX IDC_CONV_TABLES, 14, 114, 217, 77, LBS_STANDARD
+ CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Ïàðàìåòðè ñòàíäàðòíîãî îáë³êîâîãî çàïèñó", -1, 5, 193, 234, 30
CHECKBOX "Çàñòîñóâàòè âñ³ ïàðàìåòðè äî ïîòî÷íîãî îáë³êîâîãî çàïèñó òà äî ñòàíäàðòíîãî ïðîô³ëþ êîðèñòóâà÷à", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END