Установка окон на языке пользовательского интерфейса с помощью SetLocaleInfo

#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.