HKCU/Software/MetaQuotes Software/MetaTrader4/Settings/Language.
Один для всех терминалов.
Один для всех терминалов.
Как вариант просто читать заголовок терминала и смотреть каким языком написано "Демо счет", "Реальный счет" или "Конкурсный счет" ... точно не знаю как там пишется...
тип счета видно только если есть подключение к счету...
тип счета видно только если есть подключение к счету...
Не за что.
Как прочитать данную строку?
Судя по всему WinAPI, помню ветка была, но поиск опять приказал долго жить.
Ктньте ссылку где разбирали как писать и читать инфу из реестра.Увы, не видел такой.
А вообще можно начать отсюда
____
Насколько я окинул мимолетным взглядом, писать дллку не надо, можно обойтись одной системной и кодом на MQL.
Для истории.
Код взят от сюда и немного подредакторован. Всем спасибо.
#import "advapi32.dll" int RegOpenKeyA(int hkey, string lpSubKey, int phkResult[]); int RegCloseKey(int hkey); int RegQueryValueExA(int hkey, string lpValueName, int lpReserved, int lpType[], string lpData, int lpcbData[]); int RegSetValueExA(int hkey, string lpValueName, int Reserved, int dwType, string lpData, int cbData); int start() { string Res = GetRegString(0x80000001, "Software\\MetaQuotes Software\\MetaTrader 4\\Settings", "Language"); Print(Res); MessageBox(Res); } string GetRegString(int HomeKey, string KeyName, string ValueName) { int hkey[1]; //Handle раздела реестра string sData; //переменная для хранения значения int lres; //Результат работы API функций int lDataType[1]; //Тип возвращаемого значения int lDlen[1]; //переменная для хранения длины строки int p; //переменная для подрезки последних пустых строк lres = RegOpenKeyA(HomeKey, KeyName, hkey); // Открываем Раздел Print("RegOpenKeyA ret code="+lres); if (lres!=0) return(""); //Если вернулся не ноль - ошибка, выходим sData = " "; lDlen[0] = StringLen(sData); lres = RegQueryValueExA(hkey[0], ValueName, 0, lDataType, sData, lDlen); //Читаем значение Print("RegQueryValueExA ret code="+lres+" Value="+sData); if (lres!=0) return(""); //Если вернулся не ноль - ошибка, выходим if (lDataType[0]==1 || lDataType[0]==2) return(StringSubstr(sData,0,lDlen[0]-1)); // REG_SZ, REG_EXPAND_SZ - Unicode nul terminated string else if (lDataType[0]==7) // REG_MULTI_SZ - Multiple Unicode Strings { for(p=lDlen[0];0<p;p--) if(StringGetChar(sData,p)!=0) break; sData = StringSubstr(sData,0,p); for(p=StringLen(sData);0<p;p--) if(StringGetChar(sData,p)==0) StringSetChar(sData,p,10); //заменим нули на символы переноса строки return(sData); } else return(""); //остальные типы данных не преобразуются в строку :( lres = RegCloseKey(hkey[0]); }
Код взят от сюда и немного подредакторован. Всем спасибо.
Выяснилось следующее:
1. Если терминал проинсталлирован на чистую винду, то в разделе [HKEY_CURRENT_USER\Software\MetaQuotes Software\MetaTrader 4\Settings] параметра с языком нет.
2. если принудительно поставить язык терминала (напимер English) то параметр появляется в реестре. Если загрузить терминал, то он будет на языке в соответствии записи в реестре, но если запись удалить и перезагрузить терминал, то язык будет определен по локали операционки.
Применение кода выложенного выше будет рботать 50/50 (либо работает либо нет)
Есть идеи как обойти данный ньюанс без ручного вмешательства в настройки терминала?
Еще бы хотелось услышать от разработчиков каким способом определяется язык, если параметра в реестре нет.
1. Если терминал проинсталлирован на чистую винду, то в разделе [HKEY_CURRENT_USER\Software\MetaQuotes Software\MetaTrader 4\Settings] параметра с языком нет.
2. если принудительно поставить язык терминала (напимер English) то параметр появляется в реестре. Если загрузить терминал, то он будет на языке в соответствии записи в реестре, но если запись удалить и перезагрузить терминал, то язык будет определен по локали операционки.
Применение кода выложенного выше будет рботать 50/50 (либо работает либо нет)
Есть идеи как обойти данный ньюанс без ручного вмешательства в настройки терминала?
Еще бы хотелось услышать от разработчиков каким способом определяется язык, если параметра в реестре нет.
Определяется по локали операционки
Где хранится локаль операционки?
можно так :
var lng = navigator.userLanguage;:)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Разработчики и пользователи MT4, подскажите если кто-то знает как определить используемый язык в терминале.