اجرا یک فایل bat داخل mql4

جمعه ۱۴۰۳/۱۲/۱۷

اول از همه بگم که این موزیک رو از دست ندی

https://open.spotify.com/track/3JqZ1VJzwlX499W9avmCHo?si=9a0cbc06a8cb43fc

و چرا اینجا میذارم ؟

چون تو الان خوابی :)

و منم اصن دوست ندارم وقتی خوابی مزاحمت بشم و بهت پیام بدم

و چون میدونم اینجا رو میخونی پس اینجا برات بارگذاری کردم

و اما بعددددد

خب با این قطعه کد میتونی یک bat فایل رو در mql4 صدا بزنی

فقط حواست باشه که تیک allow dll رو هم تیک بزنی

کدش خیلی ساده است

محتویات bat اینه

@echo off
echo %COMPUTERNAME% > computer_name.txt
wmic diskdrive get serialnumber | findstr /r /v "^$" | findstr /r /v "SerialNumber" >> computer_name.txt

البته این هم هست که مثل دستور بالا عمل میکنه اما ، همه کارکتر ها رو بهم میچسبونه

@echo off
:: فعال کردن Delayed Expansion
setlocal enabledelayedexpansion

:: دریافت Computer Name و ذخیره در متغیر
for /f %%i in ('echo %COMPUTERNAME%') do set compName=%%i

:: دریافت شماره سریال‌های دیسک و ذخیره در متغیر
set serials=
for /f "skip=1" %%a in ('wmic diskdrive get serialnumber') do (
set "serials=!serials!%%a"
)

:: ترکیب Computer Name و سریال‌ها بدون فاصله
echo %compName%!serials! > "%~dp0MQL4\Files\computer_name.txt"

و محتویات mql4 اینه

البته باید در اول برنامه اینو اضافه کنی


#include // برای اجرای دستور خارجی
#include


#import "shell32.dll"
int ShellExecuteW(int hwnd,const string Operation,const string File,const string Parameters,const string Directory,int ShowCmd);
#import

بعدش توی این تابع میتونی صداش بزنی :)

string GetComputerName() {

// استفاده از TerminalInfoString برای گرفتن مسیر داده ترمینال
string terminalDataPath = TerminalInfoString(TERMINAL_DATA_PATH);

// اجرای فایل BAT
int r = ShellExecuteW(0, "Open", "get_computer_name.bat", NULL, terminalDataPath, 5);
// Print("Shell ", r); // می‌تونید این رو برای بررسی نتیجه‌ی اجرای فایل BAT فعال کنید

// کمی صبر می‌کنیم تا فایل نوشته بشه
Sleep(1000);




string content ="";

//--- parameters for data reading
string InpFileName="computer_name.txt"; // file name
string InpDirectoryName=""; // directory name

//--- open the file
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName, FILE_READ | FILE_TXT);
if(file_handle!=INVALID_HANDLE)
{
//PrintFormat("%s file is available for reading",InpFileName);
//PrintFormat("File path: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));

//--- additional variables
FileSeek(file_handle, 0, SEEK_SET); // اطمینان از اینکه نشانگر فایل در ابتدای فایل قرار دارد

//--- read data from the file
while (!FileIsEnding(file_handle)) {
string line = FileReadString(file_handle);
content = content + line;
Print(content);
}

//--- close the file
FileClose(file_handle);
//PrintFormat("Data is read, %s file is closed",InpFileName);
}
else
PrintFormat("Failed to open %s file, Error code = %d",InpFileName,GetLastError());




// برگشت دادن محتویات خوانده شده
return content;




}