static VOID SaveSystemSettings( PGLOBALDATA pGlobalData) { WCHAR ACPPage[9]; WCHAR OEMPage[9]; HKEY langKey; DWORD ret; WCHAR value[5]; DWORD valuesize; ret = GetLocaleInfoW(MAKELCID(pGlobalData->SystemLCID, SORT_DEFAULT), LOCALE_IDEFAULTCODEPAGE, OEMPage, sizeof(OEMPage)/sizeof(WCHAR)); if (ret == 0) { PrintErrorMsgBox(IDS_ERROR_OEM_CODE_PAGE); return; } ret = GetLocaleInfoW(MAKELCID(pGlobalData->SystemLCID, SORT_DEFAULT), LOCALE_IDEFAULTANSICODEPAGE, ACPPage, sizeof(ACPPage)/sizeof(WCHAR)); if (ret == 0) { PrintErrorMsgBox(IDS_ERROR_ANSI_CODE_PAGE); return; } /* Set codepages */ ret = RegOpenKeyW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\NLS\\CodePage", &langKey); if (ret != ERROR_SUCCESS) { PrintErrorMsgBox(IDS_ERROR_NLS_CODE_REG); return; } RegSetValueExW(langKey, L"OEMCP", 0, REG_SZ, (BYTE *)OEMPage, (wcslen(OEMPage) +1 ) * sizeof(WCHAR)); RegSetValueExW(langKey, L"ACP", 0, REG_SZ, (BYTE *)ACPPage, (wcslen(ACPPage) +1 ) * sizeof(WCHAR)); RegCloseKey(langKey); wsprintf(value, L"%04hX", LANGIDFROMLCID(pGlobalData->SystemLCID)); valuesize = (wcslen(value) + 1) * sizeof(WCHAR); /* Set language */ ret = RegOpenKeyW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\NLS\\Language", &langKey); if (ret != ERROR_SUCCESS) { PrintErrorMsgBox(IDS_ERROR_NLS_KEY_REG); return; } RegSetValueExW(langKey, L"Default", 0, REG_SZ, (BYTE *)value, valuesize); RegCloseKey(langKey); }
/* Property page dialog callback */ INT_PTR CALLBACK LanguagesPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { SHELLEXECUTEINFOW shInputDll; switch (uMsg) { case WM_INITDIALOG: break; case WM_COMMAND: switch (LOWORD(wParam)) { /* If "detail" button pressed */ case IDC_DETAIL_BUTTON: if (HIWORD(wParam) == BN_CLICKED) { memset(&shInputDll, 0x0, sizeof(SHELLEXECUTEINFOW)); shInputDll.cbSize = sizeof(shInputDll); shInputDll.hwnd = hwndDlg; shInputDll.lpVerb = L"open"; shInputDll.lpFile = L"RunDll32.exe"; shInputDll.lpParameters = L"shell32.dll,Control_RunDLL input.dll"; if (ShellExecuteExW(&shInputDll) == 0) { PrintErrorMsgBox(IDS_ERROR_INPUT_DLL); } } break; } break; } return FALSE; }