Скачать MetaTrader 5

Запуск скрипта через WinApi

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Тысяча человек уже опубликовали продукты в Маркете. Опубликуй и ты свой!
Vict
170
Vict 2014.07.28 05:12 

Добрый день.

Как запустить скрипт? Поиском пользовался, соорудил такую конструкцию (терминал x32):

#property strict


#import "user32.dll"
  int RegisterWindowMessageW(string lpstring);
  int SendMessageA(int hWnd, int Msg, int wParam, string lParam);
#import


void OnStart()
{
    int hwnd = WindowHandle(Symbol(), Period()); 
    int MT4InternalMsg = RegisterWindowMessageW("MetaTrader4_Internal_Message"); 
    SendMessageA(hwnd, MT4InternalMsg, 16, "name");   
}

Не работает. Из-за 64х битных терминалов схему отменили?

P.S: char также пробовал.

Dmitry Fedoseev
42920
Dmitry Fedoseev 2014.07.28 05:18  
Pavlick:

Добрый день.

Как запустить скрипт? Поиском пользовался, соорудил такую конструкцию (терминал x32):

Не работает. Из-за 64х битных терминалов схему отменили?


Из-за уникода наверно. При импорте функций замените string на массивы uchar по ссылке. Перед вызовом функции сторку преобразовывать в массив функцией StringToCharArray().
Vict
170
Vict 2014.07.28 05:41  
Я же подписал - с char пробовал.
Dmitry Fedoseev
42920
Dmitry Fedoseev 2014.07.28 06:04  
Pavlick:
Я же подписал - с char пробовал.
А я где-то писал про char?
Комбинатор
15929
Комбинатор 2014.07.28 07:03  
SendMessageW
Ihor Herasko
9060
Ihor Herasko 2014.07.28 08:17  
Вот здесь уже обсуждалось (https://www.mql5.com/ru/forum/151863). Из DLL - вызывается. Из MQL4 - не получается. Хотя, возможно, просто не докопал в эту сторону, т. к. достаточно было вызова скрипта из DLL.
Dmitry Fedoseev
42920
Dmitry Fedoseev 2014.07.28 08:26  
Scriptong:
Вот здесь уже обсуждалось (https://www.mql5.com/ru/forum/151863). Из DLL - вызывается. Из MQL4 - не получается. Хотя, возможно, просто не докопал в эту сторону, т. к. достаточно было вызова скрипта из DLL.

Все получается.
Vict
170
Vict 2014.07.28 09:39  
Integer:

Все получается.

Пример с запуском не покажите?
TheXpert:

По идеи без разницы, SendMessage не принимает строк (не знает об этом). Но пытался и с W версией.
Dmitry Fedoseev
42920
Dmitry Fedoseev 2014.07.28 09:46  
Pavlick:

Пример с запуском не покажите?
По идеи без разницы, SendMessage не принимает строк (не знает об этом). Но пытался и с W версией.

См. личку.
Vadim Zhunko
5227
Vadim Zhunko 2014.07.28 09:48  
Pavlick:

Пример с запуском не покажите?
По идеи без разницы, SendMessage не принимает строк (не знает об этом). Но пытался и с W версией.
Свой пример покажите. Все работает до сих пор. Только теперь надо учитывать путь к MQL-программе.
Vict
170
Vict 2014.07.28 11:30  
Zhunko:
Свой пример покажите. Все работает до сих пор. Только теперь надо учитывать путь к MQL-программе.

Не знаю как ещё пробовать:

#property strict


#import "user32.dll"
  int RegisterWindowMessageW(string lpstring);
  int SendMessageW(int hWnd, int Msg, int wParam, string lParam);
#import


void OnStart()
{
    long next = ChartNext(0);
    int hwnd = (int)ChartGetInteger(next, CHART_WINDOW_HANDLE);
    int MT4InternalMsg = RegisterWindowMessageW("MetaTrader4_Internal_Message"); 
    SendMessageW(hwnd, MT4InternalMsg, 16, "C:\TDM\msys\1.0\home\Pavel\FXOpen\MQL4\Scripts\fibo.ex4");
    //SendMessageW(hwnd, MT4InternalMsg, 16, "C:\TDM\msys\1.0\home\Pavel\FXOpen\MQL4\Scripts\fibo");
    //SendMessageW(hwnd, MT4InternalMsg, 16, "FXOpen\MQL4\Scripts\fibo.ex4");
    //SendMessageW(hwnd, MT4InternalMsg, 16, "FXOpen\MQL4\Scripts\fibo");
    //SendMessageW(hwnd, MT4InternalMsg, 16, "MQL4\Scripts\fibo.ex4");
    //SendMessageW(hwnd, MT4InternalMsg, 16, "MQL4\Scripts\fibo");
    //SendMessageW(hwnd, MT4InternalMsg, 16, "Scripts\fibo.ex4");
    //SendMessageW(hwnd, MT4InternalMsg, 16, "Scripts\fibo");
    //SendMessageW(hwnd, MT4InternalMsg, 16, "fibo.ex4");
    SendMessageW(hwnd, MT4InternalMsg, 16, "fibo");     
}

У вас есть работающий вариант?

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий