Запуск скрипта из эксперта по имени скрипта на WinAPI.

 

ALL привет!

Капаю форум 2-й день и не могу найти рабочего примера запуска скрипта через WinAPI по его имени.

Есть библиотека https://www.mql5.com/ru/code/9951 написанная Zhunko в которой есть функция:

// 5.9. Функция загружает на указанный график скрипт по его имени. В случае успеха функция возвращает TRUE, иначе - FALSE.
 bool ServiceLoadScript(int    hwndChart,    // Системный дескриптор окна графика, куда загружается скрипт.
                        string szNameScript, // Имя загружаемого скрипта.
                        int    bOK);         // Подтверждение запуска скрипта, при наличии диалогового окна свойств скрипта. Скрипт может не иметь параметров!
                                             // При использовании метода для загрузки скрипта из скрипта на текущем графике параметр не работает из-за
                                             // невозможности одновременной работы двух скриптов на одном графике. 

// TRUE - автонажатие на кнопку "OK" разрешено, FALSE - автонажатие на кнопку "OK" запрещено.

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

Во многих скриптах в кодебейс и разных ветках применяется:

PostMessageA(hmain,WM_COMMAND,33042,0); // Запускаем сккрипта

Но это запуск скрипта который запускался ранее и является как-бы выделенным в окне навигатора.

т.е. перепоробывав все что озвучено и описано на форуме результата не добился...

 

У меня эта функция работает во множестве программ. Ничего не падает.

Код выложите, где падает.

 
Zhunko:

У меня эта функция работает во множестве программ. Ничего не падает.

Код напишите, где падает.


C запуском скрипта по имени получилось, вот открытие например графика по имени инструмента из обзора рынка режит терминал напрочь.

Тестирую твой пример скрипта Check_ServicesMT4.dll

Открыт чарт USDCAD запускаю скрипт в параметрах выбираю

OpenChartByName = true;

NameTool = "EURUSD";

NameTimeFrame = "M1";

все остальное как есть.

По описанию, должен открыться график EURUSD M1, по факту

There has been a critical error
Time        : 2011.03.24 15:09
Program     : Client Terminal
Version     : 4.00 (build: 225, 10 Jul 2009)
OS          : Windows XP Professional 5.1 Service Pack 3 (Build 2600)
Processors  : 1 x X86 (level 6)
Memory      : 523752/318972 kb
Exception   : C0000005
Address     : 1000AA30
Access Type : read
Access Addr : 18A1A7B0

Registers   : EAX=18A1A7B0 CS=001b EIP=1000AA30 EFLGS=00010212
            : EBX=00000000 SS=0023 ESP=0240FA34 EBP=0240FAD0
            : ECX=18A1A7B0 DS=0023 ESI=18A1A7B1 FS=003b
            : EDX=00000002 ES=0023 EDI=01423FC8 GS=0000

Stack Trace : 004588B5 00463E17 00455691 7C80B729
            : 00000000 00000000 00000000 00000000
            : 00000000 00000000 00000000 00000000
            : 00000000 00000000 00000000 00000000

Modules     :
          1 : 00400000 002B1000 c:\metatrader\terminal.exe
          2 : 01810000 00327000 c:\windows\system32\xpsp2res.dll
          3 : 10000000 00067000 c:\metatrader\experts\libraries\servicesmt4.dll
          4 : 5B260000 00038000 c:\windows\system32\uxtheme.dll
          5 : 61EC0000 0000E000 c:\windows\system32\mfc42loc.dll
          6 : 698B0000 00058000 c:\windows\system32\hnetcfg.dll
          7 : 71A30000 00040000 c:\windows\system32\mswsock.dll
          8 : 71A70000 00008000 c:\windows\system32\wshtcpip.dll
          9 : 71A80000 00008000 c:\windows\system32\ws2help.dll
         10 : 71A90000 00017000 c:\windows\system32\ws2_32.dll
         11 : 72CD0000 00008000 c:\windows\system32\msacm32.drv
         12 : 72CE0000 00009000 c:\windows\system32\wdmaud.drv
         13 : 73D90000 000F1000 c:\windows\system32\mfc42.dll
         14 : 746E0000 0004C000 c:\windows\system32\msctf.dll
         15 : 75310000 0002E000 c:\windows\system32\msctfime.ime
         16 : 76350000 00005000 c:\windows\system32\msimg32.dll
         17 : 76360000 0001D000 c:\windows\system32\imm32.dll
         18 : 76380000 00049000 c:\windows\system32\comdlg32.dll
         19 : 769A0000 000B5000 c:\windows\system32\userenv.dll
         20 : 76B20000 0002E000 c:\windows\system32\winmm.dll
         21 : 76C20000 0002E000 c:\windows\system32\wintrust.dll
         22 : 76C80000 00028000 c:\windows\system32\imagehlp.dll
         23 : 77110000 0008B000 c:\windows\system32\oleaut32.dll
         24 : 773C0000 00103000 c:\windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\comctl32.dll
         25 : 774D0000 0013E000 c:\windows\system32\ole32.dll
         26 : 77A70000 00096000 c:\windows\system32\crypt32.dll
         27 : 77B10000 00012000 c:\windows\system32\msasn1.dll
         28 : 77BC0000 00007000 c:\windows\system32\midimap.dll
         29 : 77BD0000 00015000 c:\windows\system32\msacm32.dll
         30 : 77C00000 00058000 c:\windows\system32\msvcrt.dll
         31 : 77DC0000 000AC000 c:\windows\system32\advapi32.dll
         32 : 77E70000 00093000 c:\windows\system32\rpcrt4.dll
         33 : 77F10000 00049000 c:\windows\system32\gdi32.dll
         34 : 77F60000 0007C000 c:\windows\system32\shlwapi.dll
         35 : 77FE0000 00011000 c:\windows\system32\secur32.dll
         36 : 7C800000 000F8000 c:\windows\system32\kernel32.dll
         37 : 7C900000 000B3000 c:\windows\system32\ntdll.dll
         38 : 7C9C0000 0081B000 c:\windows\system32\shell32.dll
         39 : 7E360000 00091000 c:\windows\system32\user32.dll

Call stack  :

на Windows 7 тоже падает терминал.

Функция открывает окно графика символа, расположенного в строке nLine окна "Обзор рынка" работает без проблем.

 

Кирилл, внимательно!!!! Там написано красным:

Функции выделенные красным цветом доступны только зарегистрированным пользователям библиотеки.

Мне надо бы сделать, так, чтобы терминал не падал при использовании этих функций.
 

Посмотрел код свой. Падать будет только от ServiceOpenChartByName().

Переделаю к следующей версии.

 
Zhunko:

Кирилл, внимательно!!!! Там написано красным:

Мне надо бы сделать, так, чтобы терминал не падал при использовании этих функций.

Как стать зарегистрированным пользователем библиотеки, а то изобретать велосипед с этим API не хочется когда есть уже готовый вариант.
 
Причина обращения: