Запуск скрипта через WinApi - страница 2

 

Так тоже не работает:

#property strict


#import "user32.dll"
  int RegisterWindowMessageA(uchar &lParam[]);
  int SendMessageA(int hWnd, int Msg, int wParam, uchar &lParam[]);
#import


void OnStart()
{
    uchar buf[];
    uchar buf2[];
    StringToCharArray("MetaTrader4_Internal_Message", buf);
    //StringToCharArray("fibo", buf2);
    //StringToCharArray("fibo.ex4", buf2);
    //StringToCharArray("Scripts\fibo", buf2);
    //StringToCharArray("Scripts\fibo.ex4", buf2);
    //StringToCharArray("MQL4\Scripts\fibo", buf2);
    //StringToCharArray("MQL4\Scripts\fibo.ex4", buf2);
    //StringToCharArray("FXOpen\MQL4\Scripts\fibo", buf2);
    //StringToCharArray("FXOpen\MQL4\Scripts\fibo.ex4", buf2);
    //StringToCharArray("C:\TDM\msys\1.0\home\Pavel\FXOpen\MQL4\Scripts\fibo", buf2);
    StringToCharArray("C:\TDM\msys\1.0\home\Pavel\FXOpen\MQL4\Scripts\fibo.ex4", buf2);
    
    
    long next = ChartNext(0);
    int hwnd = (int)ChartGetInteger(next, CHART_WINDOW_HANDLE);
    int MT4InternalMsg = RegisterWindowMessageA(buf);
    
   
    //SendMessageA(hwnd, MT4InternalMsg, 16, buf2);
    //SendMessageA(hwnd, MT4InternalMsg, 15, buf2);  
    //SendMessageA(hwnd, MT4InternalMsg, 14, buf2);  
    SendMessageA(hwnd, MT4InternalMsg, 13, buf2);         
}
 
Pavlick:

Так тоже не работает:


Не надо весь путь указывать, достаточно имени "fibo"
 

Видимо мк чего-то подкрутили, не запускается (НЕ ПОВТОРЯЙТЕ ЭТО, ЕСЛИ РЕШИЛИСЬ, ТО ОТКЛЮЧИТЕСЬ ОТ ТОРГОВОГО СЧЕТА):

uchar buf[];
    uchar buf2[];
    StringToCharArray("MetaTrader4_Internal_Message", buf);
    StringToCharArray("fibo", buf2);
    
    long next = ChartNext(0);
    int hwnd = (int)ChartGetInteger(next, CHART_WINDOW_HANDLE);
    int MT4InternalMsg = RegisterWindowMessageA(buf);

    for(int mes = 10;  mes < 200;  ++ mes){
        Print(mes);
        SendMessageA(hwnd, MT4InternalMsg, mes, buf2);     
    }
 

Разобрался, вот этот код у меня срабатывает (без доп dll):

#property strict
#import "user32.dll"
  int RegisterWindowMessageA(uchar &lParam[]);
  int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]);
#import

void OnStart()
{
    char buf[];
    StringToCharArray("MetaTrader4_Internal_Message", buf);
    int MT4InternalMsg = RegisterWindowMessageA(buf);
    StringToCharArray("Fibo", buf);
    
    long next = ChartNext(0);
    int hwnd = (int)ChartGetInteger(next, CHART_WINDOW_HANDLE);
    SendMessageA(hwnd, MT4InternalMsg, 16, buf);       
}

Всё дело в регистре первой буквы скрипта. У меня скрипт называется fibo.ex4. Но терминал все скрипты видит в верхнем регистре. Странное поведение терминала.

Спасибо всем за помощь.

 
А скрипт с именем "model.ex4" приходится передавать в sendmessage в нижнем регистре.  Бардак какой-то.
 
Pavlick:

Разобрался, вот этот код у меня срабатывает (без доп dll):

Всё дело в регистре первой буквы скрипта. У меня скрипт называется fibo.ex4. Но терминал все скрипты видит в верхнем регистре. Странное поведение терминала.

Спасибо всем за помощь.

Посмотрел у себя в классе для МТ. Там в коде есть комментарий - "MQL-программы можно загрузить только по ANSI-имени".
Причина обращения: