Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Знаете ли вы, что MQL5 способен создавать собственные графические инструменты?
Nefedov Kirill
2889
Nefedov Kirill 2011.03.24 13:17 

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); // Запускаем сккрипта

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

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

Vadim Zhunko
5219
Vadim Zhunko 2011.03.24 13:59  

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

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

Nefedov Kirill
2889
Nefedov Kirill 2011.03.24 14:11  
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 окна "Обзор рынка" работает без проблем.

Vadim Zhunko
5219
Vadim Zhunko 2011.03.24 15:20  

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

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

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

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

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

Nefedov Kirill
2889
Nefedov Kirill 2011.03.24 15:38  
Zhunko:

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

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

Как стать зарегистрированным пользователем библиотеки, а то изобретать велосипед с этим API не хочется когда есть уже готовый вариант.
hrenfx
3675
hrenfx 2011.03.24 16:27  
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий