//|-----------------------------------------------------------------+ //| instance.mq5 | //| Copyright (c) 2019, marketeer | //| https://www.mql5.com/en/users/marketeer | //| Based on the code proposed by https://www.mql5.com/en/users/jjc | //| at https://www.mql5.com/en/forum/149578/page2#comment_3752924 | //|-----------------------------------------------------------------+ #property copyright "2019 (c) Marketeer" #property link "https://www.mql5.com/en/users/marketeer" #property version "1.1" #property description "This script allows a user to find out instance_id of running MT4/MT5 instance" // This script calculates instance_id for MT4/MT5 installations. // The instance_id is used in the roaming folder names such as // C:/Users/{username}/AppData/Roaming/MetaQuotes/Terminal/{instance_id}/. // Find more details here: // - MT4: https://www.metatrader4.com/en/trading-platform/help/userguide/start_comm#data_folder // - MT5: https://www.metatrader5.com/en/terminal/help/start_advanced/start#guest string instance_id(const string &strPath) { string strTest = strPath; StringToUpper(strTest); // Convert the string to widechar Unicode array (it will include a terminating 0) ushort arrShort[]; const int n = StringToShortArray(strTest, arrShort); // n includes terminating 0, and should be dropped // Convert data to uchar array for hashing uchar widechars[]; ArrayResize(widechars, (n - 1) * 2); for(int i = 0; i < n - 1; i++) { widechars[i * 2] = (uchar)(arrShort[i] & 0xFF); widechars[i * 2 + 1] = (uchar)((arrShort[i] >> 8) & 0xFF); } // Do an MD5 hash of the uchar array, containing the Unicode string uchar dummykey[1] = {0}; uchar result[]; if(CryptEncode(CRYPT_HASH_MD5, widechars, dummykey, result) == 0) { Print("Error ", GetLastError()); return NULL; } return arrayToHex(result); } string arrayToHex(uchar &arr[]) { string res = ""; for(int i = 0; i < ArraySize(arr); i++) { res += StringFormat("%.2X", arr[i]); } return(res); } void OnStart() { const string path = TerminalInfoString(TERMINAL_PATH); // const string data = TerminalInfoString(TERMINAL_DATA_PATH); // const string common = TerminalInfoString(TERMINAL_COMMONDATA_PATH); Print("Install folder = ", path); // Print("Data folder = ", data); // Print("Common folder = ", common); Print("Instance ID = ", instance_id(path)); }