У меня проблема возникает постоянно. Miranda зачем-то добавляет стандартную раскладку к английскому языку, хотя я её удалил в своей системе уже давно, вместо неё у меня стоит альтернативная английская раскладка. А если поискать по коду вызовы функций типа LoadKeyboardLayout и ActivateKeyboardLayout, и если что-то найдётся — удалить из кода?
Post Merge: 26 11 2014, 17:46:22
Попробуйте у себя, например, вместо стандартной раскладки US поставить раскладку United States-International. При этом отобразите стандартную панель с иконкой языка и переключаетелем раскладок. После перезапуститесь. Затем запустите Миранду. В стандартной языковой панели вы сможете увидеть, что у английского языка появилась ещё одна раскладка, которая обычный US. При этом в региональных настройках эта раскладка не появляется. То есть Miranda где-то добавляет эту раскладку, но винда умная — не меняет системные настройки, но при этом делает вид, что новая раскладка всё же появилась.
Windows ведёт себя похожим образом, если вызвать SystemParametersInfo(SPI_SETDEFAULTINPUTLANG, ...) — язык по умолчанию поменяется только на текущую сессию, но это до перезагрузки и в настройках остаётся прежняя настройка. Видимо Microsoft реализовала такое поведение для старых программ, которые зачем-то меняли системные настройки по своему усмотрению, но сейчас они не влияют на настоящие настройки.
Post Merge: 27 11 2014, 15:12:21
Короче поискал я по исходникам вызовы LoadKeyboardLayout, нашёл в файле /trunk/plugins/TabSRMM/src/generic_msghandlers.cpp, причём судя по коду если в PluginConfig.m_AutoLocaleSupport нолик, то волшебные танцы с раскладками выключаются. А судя по строчке m_AutoLocaleSupport = M.GetByte("al", 0); эта настройка загружается из параметра al в базе. Зашёл в редактор базы, прописал там нолик — и мои проблемы исчезли. Слава богам!