функция ShellExecuteW

 

Добрый день помогите пожалуйста, уже где только не смотрел и что только не пробовал..  (работаю на Windows 7, mql4, MT4 build 646)

Задача следующая есть конфигурационный ini файл: optimise.ini в котором задано запустить тестер и провести оптимизацию. Если из командной строки (пуск->выполнить ) пишем:

G:\торговые платформы\MT4_new\terminal.exe "G:\торговые платформы\MT4_new\optimise.ini" 

тогда запускается терминал и запускаются настройки, которые заданы в ini файле. В настройках ini файла происходит автоматизация советника за данный промежуток времени. Теперь хочу запустить тестер при помощи функции  ShellExecuteW:

ShellExecuteW(0,"Open","terminal.exe","optimise.ini","G:\торговые платформы\MT4_new",3); 

При этом терминал запускается, а запуск оптимизации, который прописан в ini файле не происходит. Помогите пожалуйста разобраться как правильно набрать эту функцию.

 

Потому что 4-й параметр:

If lpFile specifies an executable file, this parameter is a pointer to a null-terminated string that specifies the parameters to be passed to the application. The format of this string is determined by the verb that is to be invoked. If lpFile specifies a document file, lpParameters should be NULL.

Если lpFile указывает на исполняемый файл, этот параметр-указатель на оканчивающуюся нулем строку, которая задает параметры, которые будут переданы приложению. Формат этой строки определяется глаголом, который должен быть вызван. Если lpFile задает файл документа, lpParameters должен быть NULL. 

 
Zhunko:

Потому что 4-й параметр:

 

Согласно материалам из статьи https://www.mql5.com/ru/articles/1467 именно определение ShellExecuteA(0, "Open", "terminal.exe", optimise.ini, "D:\Program Files\Forex Best Trade Station", 3); работало. В новом build 646 возникает много заморочек и не работает ShellExecuteW(0,"Open","terminal.exe","optimise.ini","G:\торговые платформы\MT4_new",3) . вообщем, тестер запускается, а автоматизация нет..

Пробовал в четвертом параметре где стоит lpParameters поставить NULL, но непонятно теперь как именно прописать lpFile с параметром  ini файла.. Как написано "lpFile указывает на исполняемый файл, этот параметр-указатель на оканчивающуюся нулем строку, которая задает параметры, которые будут переданы приложению".. но как это сделать в коде?
 
Не знаю. Надо у Метаквотов спросить.
 

Проблему решили.

1. При написании обратного слэша его надо удваивать

ShellExecuteW(0,"Open","terminal.exe","optimise.ini","G:\\торговые платформы\\MT4_new",3); 


2.  Можно (и лучше) использовать полную спецификацию пути к конфигурационному файлу. В этом случае необходимо путь ограничивать кавычками, так как он содержит пробелы при том что является частью cmdline

ShellExecuteW(0,"Open","terminal.exe","\"G:\\торговые платформы\\MT4_new\\optimise.ini\"","G:\\торговые платформы\\MT4_new",3); 


3. В следующем билде в журнале терминала будет сообщение "Started with configuration file 'bla-bla-bla'" в случае его использования.

 

Доброго дня,

А как открыть страничку в браузере?  Раньше открывалась через  ShellExecuteА, например :

string ip = "https://docs.mql4.com/mql4changes";

ShellExecuteA( 0 , 0 , ip , "" , 0 , 5 ); 

 
igorad:

Доброго дня,

А как открыть страничку в браузере?  Раньше открывалась через  ShellExecuteА, например :


теперь надо юникод - ShellExecuteW
 
Спасибо, это понятно. Только как оно будет выглядеть, т.к. с теми же параметрами не работает.
 
igorad:
Спасибо, это понятно. Только как оно будет выглядеть, т.к. с теми же параметрами не работает.

ShellExecuteW(0, NULL, ip, "", NULL, 5);
Причина обращения: