写过跟单的朋友都了解这块,就是通过调用Windows API,进行文件的读写。
当然,这个功能不仅限于写跟单EA,今天我把这个主要的函数分享出来,有兴趣的可以自行研究。
1. 导入Windows API函数
- #import “kernel32.dll”
int CreateDirectoryW(string directoryName,int type);
int CreateFileW(string Filename, int AccessMode, int ShareMode, int PassAsZero, int CreationMode, int FlagsAndAttributes, int AlsoPassAsZero);
int WriteFile(int FileHandle, string BufferPtr, int BufferLength, int &BytesWritten[], int PassAsZero);
int ReadFile(int FileHandle, uchar &Buffer[], int BufferLength, int & BytesRead[], int PassAsZero);
int CloseHandle(int FileHandle);
int GetFileSize(int FileHandle, int PassAsZero);
#import
这段代码导入了Windows kernel32.dll库中的文件操作相关函数。具体来说,导入的函数包括:
- CreateDirectoryW:用于创建目录。
- CreateFileW:用于打开文件。
- WriteFile:用于向文件写入数据。
- ReadFile:用于从文件读取数据。
- CloseHandle:关闭文件句柄。
- GetFileSize:获取文件大小。
2. 读文件操作(ReadFile)
- string ReadFile(string Filename)
{
string strFileContents = “”;
int h = CreateFileW(Filename, 0x80000000 /*GENERIC_READ*/, 3 /*SHARE READ|WRITE*/, 0, 3 /*OPEN_EXISTING*/, 0, 0);
if (h == -1) {
// Open failed
} else {
int sz = GetFileSize(h, 0);
if (sz > 0) {
uchar buffer[];
ArrayResize(buffer, sz);
int read[1];
ReadFile(h, buffer, sz, read, 0);
if (read[0] == sz)
strFileContents = CharArrayToString(buffer, 0, read[0]);
}
}
CloseHandle(h);
return strFileContents;
}
这段代码用于从指定的文件中读取内容:
- CreateFileW:打开指定文件,设置文件访问模式为读取。
- GetFileSize:获取文件的大小。
- ReadFile:读取文件内容到一个缓冲区中。
- CharArrayToString:将读取到的字节数组转换为字符串。
- CloseHandle:关闭文件句柄。
3. 写文件操作(WriteFile)
- void WriteFile(string filePath,string str)
{
int BytesWritten[1] = {0};
uchar WriteBuffer[];
StringToCharArray(str, WriteBuffer);
int FileHandle = CreateFileW(FileName, 1073741824, 3, 0, 2, 0, 0);
WriteFile(FileHandle,WriteBuffer,StringLen(str),BytesWritten,0);
CloseHandle(FileHandle);
}
这段代码用于向指定的文件写入内容:
- StringToCharArray:将字符串转换为字符数组,以便写入文件。
- CreateFileW:打开或创建文件,设置文件访问模式为写入。
- WriteFile:将缓冲区内容写入文件。
- CloseHandle:关闭文件句柄。
读文件:通过调用ReadFile函数,MT4可以从本地文件中读取内容,返回文件的内容作为字符串。
写文件:通过调用WriteFile函数,MT4可以将数据(字符串)写入指定的文件。