Запуск стороннего скрипта с аргументами с помощью ShellExecuteW

 

Что нужно:

Запустить скрипт python вместе с аргументами из MQL. Выглядит его запуск так:

python .\PythonDLL_Example.py 125960 126110 126070 126250 3928 274353.845945816 119761.8349277858 18080.59072693367 -252416.3714632094 -79682.09253258759 -12446.11663140202

Пытаюсь делать это так:

#define SW_HIDE             0
#define SW_SHOWNORMAL       1

#import "shell32.dll"
   int ShellExecuteW(int hwnd,string lpOperation,string lpFile,string lpParameters,string lpDirectory,int nShowCmd);
#import

int OnInit()
{
   int r = ShellExecuteW(NULL, NULL, "C:\\Users\\Amber\\AppData\\Local\\Programs\\Python\\Python37\\python.exe", "C:\\Users\\Amber\\AppData\\Roaming\\MetaQuotes\\Terminal\\DEA332DEFF5165CB2EAFB6F9BD062C50\\MQL5\\Experts\\Advisors\\PythonDLL_Example.py 125960 126110 126070 126250 3928 274353.845945816 119761.8349277858 18080.59072693367 
252416.3714632094 -79682.09253258759 -12446.11663140202", NULL, SW_HIDE);

   Print("Код ошибки %d", r);

   return INIT_SUCCEEDED;
}

Использую полные пути на всякий случай.

Не работает! Код ошибки, если поможет - %d42

Как мне это правильно сделать?

Спасибо.

 
canonier:

Не работает! Код ошибки, если поможет - %d42



Это не ошибка, а HINSTANCE запущенного процесса. То есть запуск прошел нормально. Ошибкой будет значение от 0 до 32-х:

Return Value
Type: HINSTANCE

If the function succeeds, it returns a value greater than 32. If the function fails, it returns an error value that indicates the cause of the failure. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. It can be cast only to an int and compared to either 32 or the following error codes below.
 
canonier:

Что нужно:

Запустить скрипт python вместе с аргументами из MQL. Выглядит его запуск так:

Пытаюсь делать это так:

Использую полные пути на всякий случай.

Не работает! Код ошибки, если поможет - %d42

Как мне это правильно сделать?

Спасибо.

Вы процесс запускаете скрытым, а возвращает действительно Handle процесса, дальше по нему им можно управлять, например закрыть.

 

Парни, спасибо за помощь.

Сделал в итоге так:

1. Ассоциировал файлы .py с файлом python.exe. Таким образом, я могу не писать "..\\python.exe", а сразу указывать имя скрипта и аргументы.

2. Вот так это стало выглядеть у меня:

ShellExecuteW(NULL, NULL, "C:\\Users\\Amber\\AppData\\Roaming\\MetaQuotes\\Terminal\\DEA332DEFF5165CB2EAFB6F9BD062C50\\MQL5\\Experts\\Advisors\\PythonDLL_Example.py", "125960 126110 126070 126250 3928 274353.845945816 119761.8349277858 18080.59072693367 -252416.3714632094 -79682.09253258759 -12446.11663140202", NULL, SW_HIDE);

3. Путем дебагинга методом print(переменная) нашел косяк в своем питоновском скрипте. Там кое-где нужно было указать полные пути.

Так все.

 
Ihor Herasko:


Это не ошибка, а HINSTANCE запущенного процесса. То есть запуск прошел нормально. Ошибкой будет значение от 0 до 32-х:

Нет, это не хинстанс. Читайте внимательнее:

The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however.

 
SeriousRacoon:

Нет, это не хинстанс. Читайте внимательнее:

The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however.

И что это меняет в контексте поднятой темы?

P. S. Вы журналист наверное (они любят вырвать фразу из контекста)? ))

Причина обращения: