#c #windows #powershell #winapi
#c #Windows #powershell #winapi
Вопрос:
Я хочу изменить язык по умолчанию для системы Windows. В powershell есть способ сделать это с помощью
Set-WinUILanguageOverride -Language de-DE
(Изменяет язык на немецкий)
Тем не менее, я ищу вызов win32 api для того же. Пробовал SetLocaleInfo
, но это не сработало.Следующий код выводит 0, поскольку SetLocaleInfo не работает. GetLastError()
возвращено ERROR_INVALID_FLAGS
, но не уверен, какой флаг нужно использовать здесь. Спасибо.
int main()
{
LCID lcid = GetSystemDefaultLCID();
cout << "system default >> " << lcid << endl;
wstring regionCode;
//Tatar Russia
lcid = 1092;
regionCode = L"0x0444";
cout << "Tatar Russia " << SetLocaleInfo(lcid, LOCALE_FONTSIGNATURE | LOCALE_SISO639LANGNAME, regionCode.c_str()) << endl;
return 0;
}
Комментарии:
1. На этой странице указано , что оба передаваемых вами флага являются действительными
GetLocaleInfo
и недействительнымиSetLocaleInfo
.2. Есть какие-нибудь идеи относительно того, что может быть допустимым флагом (флагами)?
Ответ №1:
Как сказал @Petesh, два LCType
, которые вы использовали, недопустимы для этой SetLocaleInfo
функции, и для этого нет допустимого флага SetLocaleInfo
, который может устанавливать язык пользовательского интерфейса системы Windows.
Согласно User Interface Language Management
:
Язык пользовательского интерфейса
Чтобы получить язык пользовательского интерфейса, приложение может вызвать
GetUserDefaultUILanguage
илиGetUserPreferredUILanguages
. Приложение не может изменить язык пользовательского интерфейса, поскольку для его настройки нет функции.
Поэтому не существует подходящего Windows32 API, который может изменять язык пользовательского интерфейса системы Windows.