Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Совершил прорыв? Напиши статью об этом и получи 200 USD!
Паша
10
Паша 2014.12.22 10:22 
Ребята, всем привет!  Прошу сильно не пинать - в программировании нуб.
Гуглил много - возможно некачественно, но отчаялся и вот теперь прошу помощи у Вас.
Прошу помочь с таким вопросом - нужно эксперта (он уже есть) заставить в нужный момент запускать приложение *.exe или *.bat (неважно), приложение управляет движением мыши и нажиманием левой кнопки. По эксперту проблем нет, а вот с запуском приложения из MT4 не выходит.
Вопрос вроде избит - но у меня не выходит ничего. Говорят проблема после последнего обновления нарисовалась...
Что я делаю:
1) разрешил импорт dll
2) положил все что связано с запускаемым приложением в папку (все как полагается в папку юзера (в песочницу короче))
3) тестирую на вот этом коде (код нашел на просторах интернета) - ничего не работает((       (отдельно приложение запускается и работает) 
Мне кажется я чего-то не знаю про функции WinApi - что-то новое...) где-то нашел инфу что что-то там устарело, разъясните плиз или расскажите может у кого получилось победить это дело.
//+------------------------------------------------------------------+
//|                                                     Shutdown.mq4 |
//|                                                Copyright © 2010. |
//|                                                http://mql4you.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010."
#property link      "http://mql4you.ru"
#property show_confirm
#import "kernel32.dll"
int WinExec(string lpCmdLine,int uCmdShow);
//+------------------------------------------------------------------+
int start()
{if(IsDllsAllowed()==false)
   {Alert("Вызов из библиотек (DLL) невозможен. Скрипт не может выполняться.");
    return(0);}
 WinExec("shutdown.exe -s -f",1);
return(0);}
//+------------------------------------------------------------------+
Спасибо за помощь.
Ihor Herasko
8443
Ihor Herasko 2014.12.22 11:32  

На MSDN (http://msdn.microsoft.com/en-us/library/windows/desktop/ms687393(v=vs.85).aspx) написано:

Note  This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function.

 Так что лучше использовать ShellExecute.

 

P. S. Ваш код не компилируется - нет закрывающего #import. 

Паша
10
Паша 2014.12.22 20:48  

Спасибо за наводку. 

Вот разобрался, компилирую и запускаю вот этот скрипт, все равно не работает. Помогите кто-нибудь! Вобще хоть кто-то может сейчас запускать приложения из MQL4?

 Кладу Macros.exe в папку files, включаю dll в настройках MT4. может что-то еще. 

 

//+------------------------------------------------------------------+
//|                                                     template.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
//---- импорт функции из внешней DLL
#import "shell32.dll"
   int ShellExecuteA(int hwnd,string lpOperation,string lpFile,string lpParameters,string lpDirectory,int nShowCmd);
#import
//---- константы открытия\показа (параметр nShowCmd)
#define SW_HIDE             0
#define SW_SHOWNORMAL       1
#define SW_NORMAL           1
#define SW_SHOWMINIMIZED    2
#define SW_SHOWMAXIMIZED    3
#define SW_MAXIMIZE         3
#define SW_SHOWNOACTIVATE   4
#define SW_SHOW             5
#define SW_MINIMIZE         6
#define SW_SHOWMINNOACTIVE  7
#define SW_SHOWNA           8
#define SW_RESTORE          9
#define SW_SHOWDEFAULT      10
#define SW_FORCEMINIMIZE    11
#define SW_MAX              11
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{
//---- запуск командной строки
   ShellExecuteA(WindowHandle(Symbol(),0),"open","Macros.exe",NULL,NULL,SW_SHOWNORMAL);
//----
   return(0)

} 

Vitalie Postolache
11042
Vitalie Postolache 2014.12.22 20:51  
ShellExecuteW не пробовали?
Ihor Herasko
8443
Ihor Herasko 2014.12.22 21:08  
Zhura:

Спасибо за наводку. 

Вот разобрался, компилирую и запускаю вот этот скрипт, все равно не работает. Помогите кто-нибудь! Вобще хоть кто-то может сейчас запускать приложения из MQL4?

 Кладу Macros.exe в папку files, включаю dll в настройках MT4. может что-то еще. 

 

   ShellExecuteW(NULL, NULL, <полный путь к файлу>, <список ключей запуска>, <рабочий каталог программы>, SW_SHOWNORMAL);

При указании пути не забывайте, что одиночный слэш - это управляющий символ. Для получения слэша его нужно дублировать: "C:\\Windows\\system32\\".

Проверил запуск терминала при помощи скрипта, запущенном на другом терминале - работает. 

Не нужно ничего располагать в  папке files - это ограничение только для "чистого" MQL4/5. При использовании WinAPI это ограничение некому контролировать.

Dmitriy Demidov
1303
Dmitriy Demidov 2016.10.19 04:22  
Scriptong:

При указании пути не забывайте, что одиночный слэш - это управляющий символ. Для получения слэша его нужно дублировать: "C:\\Windows\\system32\\".

Проверил запуск терминала при помощи скрипта, запущенном на другом терминале - работает. 

Не нужно ничего располагать в  папке files - это ограничение только для "чистого" MQL4/5. При использовании WinAPI это ограничение некому контролировать.

Спасибо, ваше сообщение мне очень помогло...
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий