Initial commit: MQL5 Scripts Collection (MetaTrader 5)
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
//|-----------------------------------------------------------------+
|
||||
//| 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));
|
||||
}
|
||||
Reference in New Issue
Block a user