求助EA如何通过WINAPI调用本地.BAT可执行文件

| 发表于 2026-7-15 16:04:37 | 显示全部楼层 |复制链接
我的需求是:我想让EA在一天设定的交易时间内完成所有交易后,执行本地.BAT自动批处理文件实现电脑自动关机。

.BAT自动批处理文件我自己做好了,但是不知如何在EA调用执行这自动批处理个文件。

我看MQL5中有WINAPI这个文件夹,百度也说可以通过WINAPI之类的文件来执行这个文件。

不知可有高人知道的,指点一二?小弟在此不胜感激!
举报

评论 使用道具

精彩评论5

haircare1
D
| 发表于 2026-7-15 21:22:33 | 显示全部楼层
// 定义 Windows API 所需的类型
typedef long HINSTANCE;
typedef long HWND;
typedef string LPCWSTR;
typedef int INT;

// 直接导入 shell32.dll 中的 ShellExecuteW 函数
#import "shell32.dll"
HINSTANCE ShellExecuteW(
  HWND    hwnd,
  LPCWSTR lpOperation,
  LPCWSTR lpFile,
  LPCWSTR lpParameters,
  LPCWSTR lpDirectory,
  INT     nShowCmd
);
#import

//+------------------------------------------------------------------+
//| 脚本/EA 的启动函数                                                |
//+------------------------------------------------------------------+
void OnStart()
  {
   // 指定要打开的 bat 文件的绝对路径(注意路径中的反斜杠需要双写)
   string batPath = "C:\\Path\\To\\Your\\script.bat";
   
   // 调用 ShellExecuteW
   // 参数说明:
   // hwnd: 父窗口句柄,填 0 即可
   // lpOperation: 操作类型,"open" 表示打开
   // lpFile: 文件路径
   // lpParameters: 参数,不需要则填空字符串 ""
   // lpDirectory: 默认工作目录,不需要则填空字符串 ""
   // nShowCmd: 窗口显示方式,1 代表正常显示 (SW_SHOWNORMAL)
   HINSTANCE result = ShellExecuteW(0, "open", batPath, "", "", 1);
   
   // ShellExecuteW 成功时返回值大于 32
   if(result > 32)
      Print("成功调用 ShellExecuteW 打开 bat 文件!");
   else
      Print("打开失败,错误码: ", (int)result);
  }
举报

点赞 1 评论 使用道具

Timer_Wang98
DD
| 发表于 2026-7-16 09:18:28 | 显示全部楼层
MT4调用本地程序可以用WinExec或ShellExecuteEx API,在MQL4的dll调用中实现。注意要把MT4的DLL导入权限打开,BAT文件路径用绝对路径避免找不到文件。
举报

点赞 1 评论 使用道具

ilapland
D
 楼主 | 发表于 2026-7-16 12:04:05 来自手机 | 显示全部楼层
谢谢二楼,讲解的非常清晰,正是我所需要的
举报

点赞 评论 使用道具

ilapland
D
 楼主 | 发表于 2026-7-16 22:07:55 | 显示全部楼层
haircare1 发表于 2026-7-15 21:22
// 定义 Windows API 所需的类型
typedef long HINSTANCE;
typedef long HWND;

// 定义 Windows API 所需的类型
typedef long HINSTANCE;
typedef long HWND;
typedef string LPCWSTR;
typedef int INT;

这个好像编译不了,提示错误是unexpected token,应该是语法上编译不通,但是查帮助文件这个语法是没有错误的。这就奇怪了,不管是放在MQL5哪部分里都编译不了
举报

点赞 评论 使用道具

ilapland
D
 楼主 | 发表于 2026-7-17 10:01:32 | 显示全部楼层
今天试了下,方法可行,但是typedef那一部分在MQL5里编译过不了,老是提示unexpected token,然后我改成了使用#define就可以了。
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册